2011-04-03 2 views
0

Je cherche à avoir une regex qui valide n'importe quelle chaîne de 046R à 120R.Regex pour valider une chaîne consécutive alphanumérique

Semble assez simple, mais il me manque quelque chose ici. c'est ce que j'ai:

^04[6-9]R|0[5-9][0-9]R|10[0-9]R|11[0-9]R|120R +$ 

Mais ce n'est pas ramasser le 120R comme une chaîne valide ainsi. Comment cette expression peut-elle être simplifiée?

Merci d'avance.

+2

Pourquoi avez-vous '+' (seulement) après 120R? Cela signifie que lorsque vous avez 120R, il doit être suivi d'au moins un espace. – sawa

+0

'10 [0-9] R | 11 [0-9] R' ~' 1 [01] [0-9] R'. –

Répondre

2

Supprimez la dernière  +. Sinon, il faut un ou plusieurs espaces après la chaîne 120R pour être validés. En outre, | a une très faible priorité. Les numéros ^ et $ doivent rester en dehors du groupe contenant |.

^(?:04[6-9]|0[5-9][0-9]|1[01][0-9]|120)R\s*$ 
+0

Battez-moi. Encore une chose, cependant - si vous voulez autoriser les espaces de fin, vous pouvez utiliser '*' (zéro ou plus) au lieu de '+ '(un ou plusieurs):'^(...) R * $ 'Bravo! –

+0

Ça ne marche pas. Il n'accepte pas certaines des valeurs qu'il devrait avoir. Jetez un oeil: [link] http://www.rubular.com/r/YZsPIRInNV – Bruno

+0

@Bruno: C'est parce que votre cas de test n'est pas "propre" - certaines entrées contiennent un espace de fin inutile. Cela peut être corrigé en ajoutant un '\ s *' à la fin comme le commentaire de Xavier. Voir http://www.rubular.com/r/3prIDsOncr – kennytm

1

Vous pouvez exclure certaines correspondances à l'aide de la fonction de lecture anticipée négative et simplifier la regex.

^(?!0[0-3])(?!04[0-5])[01]\d\dR$ 
Questions connexes