2016-08-01 1 views
1

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?

+3

Je suis surpris qu'il fonctionne du tout, étant donné le '[]' déséquilibré. –

+5

Le premier '[' ne devrait pas être échappé. Retirez le '' \ ''. –

+0

@Andy Turne longueur devrait être {1,5} – gstackoverflow

Répondre

3

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 -------^ 
6

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 
+0

@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. –

3

Regex sans \\ fonctionnera. Vous n'avez pas besoin d'échapper à quoi que ce soit.

"123".matches("[a-zA-Z0-9]{1,5}");