web-dev-qa-db-fra.com

Comment déterminer si une chaîne a des caractères non alphanumériques?

J'ai besoin d'une méthode qui puisse me dire si une chaîne a des caractères non alphanumériques.

Par exemple, si la chaîne est "abcdef?" ou "abcdefà", la méthode doit renvoyer true.

67
lugeno

En utilisant Apache Commons Lang:

!StringUtils.isAlphanumeric(String)

Parcourez alternativement les caractères de String et vérifiez avec:

!Character.isLetterOrDigit(char)

Il vous reste encore un problème: votre exemple de chaîne "abcdefà" est alphanumérique, puisque à est une lettre. Mais je pense que vous voulez que cela soit considéré comme non alphanumérique, non?!

Donc, vous voudrez peut-être utiliser l'expression régulière à la place:

String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();
134
Fabian Barney

Une approche consiste à utiliser la classe String elle-même. Disons que votre chaîne est quelque chose comme ça:

String s = "some text";
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");

un autre consiste à utiliser une bibliothèque externe, telle que Apache commons:

String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
26
loscuropresagio

Vous devez parcourir chaque caractère de la chaîne et vérifier Character.isDigit(char); ou Character.isletter(char);

Alternativement, vous pouvez utiliser regex.

5
Mechkov

Utilisez cette fonction pour vérifier si une chaîne est alphanumérique:

public boolean isAlphanumeric(String str)
{
    char[] charArray = str.toCharArray();
    for(char c:charArray)
    {
        if (!Character.isLetterOrDigit(c))
            return false;
    }
    return true;
}

Cela évite d'importer des bibliothèques externes et le code peut facilement être modifié si vous souhaitez ultérieurement effectuer différentes vérifications de validation des chaînes.

2
Dan Bray

Si vous pouvez utiliser la bibliothèque Apache Commons, alors Commons-Lang StringUtils a une méthode appelée isAlphanumeric() qui fait ce que vous recherchez.

1
Shaun

string.matches("^\\W*$"); devrait faire ce que vous voulez, mais n'inclut pas les espaces. string.matches("^(?:\\W|\\s)*$"); correspond également aux espaces.

1
nike4613

Vous pouvez utiliser la méthode statique isLetter (char c) de la classe Character dans Java.lang.

public boolean isAlpha(String s) {
    char[] charArr = s.toCharArray();

    for(char c : charArr) {
        if(!Character.isLetter(c)) {
            return false;
        }
    }
    return true;
}
0
Oguz