2013-04-11 1 views
1

ma sourcevérification de la conformité (Regex)

Matcher matcher = Pattern.compile("[0-9]").matcher("35423523");

matcher.matches() - est maintenant faux

mais je dois matcher.matches() - true - parce que la chaîne est un nombre

ou par exemple

Pattern.compile("[0-9A-Za-z]").matcher("35dwedwfeASADdfd423523"); - doit être vrai

ou Pattern.compile("[0-9]").matcher("354ccwq23523"); - doit être faux ou Pattern.compile("[0-9a-z]").matcher("354ccwq23523"); - doit être vrai

comment faire?

Répondre

5

Votre regex indique que la chaîne ne peut contenir qu'un seul caractère. Si vous en voulez plus, vous devez utiliser repetition. Ensuite, il ressemblerait à ceci: [0-9]+ ou [0-9A-Za-z]+.

+0

Je ne vois pas pourquoi ce serait nécessaire, mais des explications sur les ancres se trouvent [ici] (http://www.regular-expressions.info/anchors.html) – errieman

+0

Désolé ma mauvaise. Confondre '.match' avec' .find() '. – npinti

2

La méthode matches() vérifie the entire region against the pattern. Cela signifie que votre modèle doit correspondre à la chaîne entière:

Matcher matcher = Pattern.compile("[0-9]+").matcher("35423523"); 

et

Pattern.compile("[0-9A-Za-z]+").matcher("35dwedwfeASADdfd423523"); 

De la javadoc:

Renvoie true: si, et seulement si, les matches ensemble de la séquence de la région le motif de ce matcher

2
Pattern.compile("[0-9]+").matcher("35423523"); 

TRUE

Pattern.compile("[0-9A-Za-z]+").matcher("35dwedwfeASADdfd423523"); 

TRUE

Pattern.compile("[0-9]+").matcher("354ccwq23523"); 

FALSE

Pattern.compile("[0-9a-z]+").matcher("354ccwq23523"); 

TRUE

Si vous voulez faire correspondre certaines longueurs, vous pouvez utiliser [0-9]{1, 4} (limite inférieure -> limite supérieure)

Questions connexes