2010-04-09 4 views
2

J'ai une expression régulièreExpression régulière pour correspondre maximium de cinq mots

^[a-zA-Z+#-.0-9]{1,5}$ 

qui confirme que le mot contient des caractères alphanumériques et quelques caractères spéciaux et la longueur ne devrait pas être plus de 5 caractères.

Comment faire pour que cette expression régulière accepte un maximum de cinq mots correspondant à l'expression régulière ci-dessus.

Répondre

2

^[a-zA-Z+#\-.0-9]{1,5}(\s[a-zA-Z+#\-.0-9]{1,5}){0,4}$

En outre, vous pouvez utiliser par exemple [ ] au lieu de \s si vous voulez juste d'accepter l'espace, pas onglet et saut de ligne. Et vous pouvez écrire [ ]+ (ou \s+) pour n'importe quel nombre d'espaces (ou espaces), pas seulement un.

Modifier: Suppression de la solution non valide et correction du bogue mentionné par unicornaddict.

+0

cela ne fonctionne pas – KhanS

+0

Merci Jakob, Cela a fonctionné pour moi – KhanS

+0

Pas de problème. Aussi, soyez conscient du bug mentionné par unicornaddict; Je n'ai pas échappé ou déplacé le trait d'union comme il l'a fait (jusqu'à présent). – Jakob

1

Vous regex a un petit bug. Il correspond à des lettres, des chiffres, +, #, period mais pas hyphen et tous les caractères entre # et period. Cela est dû au fait que hyphen dans une classe char lorsqu'elle est entourée des deux côtés agit comme une méta-char range. Pour éviter cela, vous devrez échapper à la hyphen:

^[a-zA-Z+#\-.0-9]{1,5}$ 

Ou mettre au beg/fin de la classe de char, de sorte que son traité littéralement:

^[-a-zA-Z+#-.0-9]{1,5}$ 
^[a-zA-Z+#.0-9-]{1,5}$ 

maintenant pour correspondre à un max 5 ces mots que vous pouvez utiliser:

^(?:[a-zA-Z+#\-.0-9]{1,5}\s+){1,5}$ 

EDIT: Cette solution a une limitation sévère de ceux qui correspondent aux critères d'entrée qui se terminent dans l'espace blanc !!! Pour surmonter cette limitation, vous pouvez voir les ans de Jakob.

+0

+1, belle capture d'un bug – Jakob

2

Je crois que c'est peut-être ce que vous cherchez. Elle force au moins un mot de votre motif désiré, puis zéro à quatre du même, chacun précédé par un ou plusieurs espaces:

^XX(\s+XX){0,4}$ 

XX est votre seul mot regex.

Il est séparé en deux sections distinctes de sorte que vous n'avez pas besoin d'avoir des espaces à la fin de la chaîne.

+0

+1 pour éviter un espace blanc à la fin. – codaddict

Questions connexes