Je l'ai écrit l'extrait de code de test suivant:Vérifiez cette chaîne est alphanumérique de longueur 1 à 5
"123".matches("\\[a-zA-Z0-9]{1,5}");
Cependant, il retourne false
.
Pourquoi et comment résoudre ce problème?
Je l'ai écrit l'extrait de code de test suivant:Vérifiez cette chaîne est alphanumérique de longueur 1 à 5
"123".matches("\\[a-zA-Z0-9]{1,5}");
Cependant, il retourne false
.
Pourquoi et comment résoudre ce problème?
Vous échapper à la première place avec le support \\
, ce qui signifie l'expression entre les crochets ne sont pas traités comme une classe de caractères. Retirez l'échappement et vous devriez être OK:
"123".matches("[a-zA-Z0-9]{1,5}"
// Here -------^
En échappant à la première [
, vous avez fait un [
littéral, alors que vous vouliez définir une classe de caractère (expression de support).
Retirer \
:
"123".matches("[a-zA-Z0-9]{1,5}");
^
Voir la Java demo:
System.out.println("123".matches("[a-zA-Z0-9]{1,5}")); // = > true
@gstackoverflow: Juste mon avis: la meilleure réponse de travail fourni d'abord mérite d'accepter. La réponse de Mureinik est la même, et a été postée après mon [commentaire] (http://stackoverflow.com/questions/38693939/check-that-string-is-alphanumeric-with-length-1-5/38693976#comment64766620_38693939) et répondre. Je révoque mon upvote puisque je crois que ce n'était pas juste. –
Regex sans \\
fonctionnera. Vous n'avez pas besoin d'échapper à quoi que ce soit.
"123".matches("[a-zA-Z0-9]{1,5}");
Je suis surpris qu'il fonctionne du tout, étant donné le '[]' déséquilibré. –
Le premier '[' ne devrait pas être échappé. Retirez le '' \ ''. –
@Andy Turne longueur devrait être {1,5} – gstackoverflow