11
votes

Besoin d'une regex qui vérifiera si la chaîne ne consiste que des lettres A-Z et des chiffres et un soulignement (_) et un trait d'union (-)

Je recherche une regex qui vérifiera si la chaîne ne comprend que les lettres A-Z, les numéros, le soussecore ( _ ) et un trait d'union ( - ). J'ai essayé cela, mais cela ne fonctionne pas: xxx

aussi, puis-je vérifier la longueur avec regex? Sinon, je vais juste le faire avec PHP.


1 commentaires

Vérifiez la longueur avec SHLEN. Regex est un outil, pas un marteau. :)


5 Réponses :


2
votes

La regex devrait être: '^ [\ w \ d -] + $'


3 commentaires

Expliquer que: '-' est un caractère spécial à l'intérieur des crochets à moins que c'est le premier ou le dernier caractère entre les crochets.


a-za-z _ peut être remplacé par \ w , 0-9 peut être remplacé par \ d


A-ZA-Z0-9 _ peut être remplacé par \ w uniquement.



4
votes

Le plus court:

/ ^ [\ w -] + $ /


3 commentaires

Le soussecore fait partie de \ w .


\ w comprend _. Notez que dans d'autres localités, \ W peut inclure des caractères accentués.


@seize si cela inclurait des caractères accentués dans d'autres locaux, no.



16
votes

Vous devez mettre votre regex / ^ a-za-z0-9 _- $ / dans une classe de caractères / [...] / .
Cela signifie que vous pouvez correspondre tout personnage dans la classe de caractères. Vous devez également spécifier un quantificateur, car / ^ [a-za-z0-9 _-] $ / correspondre à un seul caractère.

Exemples:
/ ^ [a-za-z0-9 _-] + / avec le signe + vous correspondez à un ou plusieurs fois

/ ^ [a-za-z0-9 _-] {1,} $ / identique que ci-dessus

/ ^ [a-za-z0-9 _-] {10,20} $ / entre 10 et 20 caractères long.
/ ^ [a-za-z0-9 _-] {15} $ / il doit être exactement 15 caractères. Vous pouvez l'utiliser pour vérifier la longueur de la chaîne.

Vous pouvez également utiliser le mot-clé suivant pour rendre votre regex facile à lire:
/ ^ [\ w -] + $ / qui correspond à un caractère de mot (y compris le soulignement, les lettres et les chiffres) ou un tiret, une ou plusieurs fois.


0 commentaires

1
votes

Les réponses jusqu'à présent expliquer correctement la classe de caractères / ^ [A-ZA-Z0-9 _-] + $ /

Vous pouvez vérifier la longueur. + signifie "un ou plusieurs des précédents", * signifie zéro ou plus des moyens précédents "et {2,4}" entre 2 et 4 de la précédente ".

Vous ne pouvez pas spécifier la longueur doit être une prime, cependant. Spécifier que la longueur doit être même possible, mais non triviale: / ^ (xx) {1,3} $ / correspond xx, xxxx ou xxxxxx. Le compte ici désigne ici le nombre de paires , pas le nombre de x'es


0 commentaires

6
votes

Je voudrais utiliser celui-ci: xxx

sur pourquoi je n'utilise pas \ w , la citation suivante, prise de Référence de modèle PHP PCRE doit expliquer pourquoi vous ne devriez pas utiliser \ w dans cette situation :

un caractère "mot" est une lettre ou un chiffre ou le caractère de soulignement, c'est-à-dire n'importe quel caractère qui peut faire partie d'un "mot" perl. La définition des lettres et des chiffres est contrôlée par les tables de caractères de PCRE et peut varier si la correspondance spécifique à des paramètres régionaux est en cours. Par exemple, dans les paramètres locaux "FR" (français), certains codes de caractères supérieurs à 128 sont utilisés pour les lettres accentuées, et celles-ci sont assorties par \ w .

Ce comportement n'est pas souhaitable dans ce cas, alors si vous souhaitez vous soucier des paramètres régionaux, utilisez des classes de caractères droites au lieu du \ w sténographie.

Si vous souhaitez spécifier une longueur minimale (par exemple 3): xxx

Si vous souhaitez spécifier une longueur minimale et maximale (par exemple 2 et 5): xxx


0 commentaires