J'aimerais disposer d'une expression régulière qui vérifie si une chaîne de caractères ne contient que des lettres majuscules et minuscules, des chiffres et des traits de soulignement.
Réponses
Trop de publicités?Pour faire correspondre une chaîne qui contient uniquement ces caractères (ou une chaîne vide), essayez
"^[a-zA-Z0-9_]*$"
Cela fonctionne pour les expressions régulières .NET, et probablement aussi pour beaucoup d'autres langages.
La décomposition :
^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string
Si vous ne voulez pas autoriser les chaînes vides, utilisez + au lieu de *.
EDIT Comme d'autres l'ont souligné, certains langages de regex ont une forme abrégée pour [a-zA-Z0-9_]
. Dans le langage regex de .NET, vous pouvez activer le comportement ECMAScript et utiliser \w
en guise de raccourci (ce qui donne ^\w*$
ou ^\w+$
). Notez que dans d'autres langues, et par défaut dans .NET, \w
est un peu plus large, et correspondra également à d'autres types de caractères unicode (merci à Jan de l'avoir signalé). Donc, si vous avez vraiment l'intention de faire correspondre uniquement ces caractères, il est probablement préférable d'utiliser la forme explicite (plus longue).
Il y a beaucoup de verbosité ici, et je suis profondément contre, donc, ma réponse définitive serait :
/^\w+$/
\w
est équivalent à [A-Za-z0-9_]
ce qui est à peu près ce que vous voulez. (à moins que nous introduisions l'unicode dans le mélange)
Utilisation de la +
vous ferez correspondre un ou plusieurs caractères. Si vous souhaitez également accepter une chaîne vide, utilisez *
à la place.
Vous voulez vérifier que chaque caractère correspond à vos exigences, c'est pourquoi nous utilisons :
[A-Za-z0-9_]
Et vous pouvez même utiliser la version abrégée :
\w
Ce qui est équivalent (dans certaines saveurs de regex, donc assurez-vous de vérifier avant de l'utiliser). Ensuite, pour indiquer que la chaîne entière doit correspondre, vous utilisez :
^
Pour indiquer que la chaîne doit commencer par ce caractère, utilisez alors
$
Pour indiquer que la chaîne doit se terminer par ce caractère. Utilisez alors
\w+ or \w*
Pour indiquer "1 ou plus", ou "0 ou plus". En mettant tout ça ensemble, nous avons :
^\w*$
Hum... question : Faut-il qu'il y ait au moins un personnage ou pas ? Peut-il s'agir d'une chaîne vide ?
^[A-Za-z0-9_]+$
Doit contenir au moins un caractère alphanumérique ou un trait de soulignement, en majuscules ou en minuscules. S'il peut être de longueur zéro, remplacez simplement le + par *.
^[A-Za-z0-9_]*$
Edit :
Si des signes diacritiques doivent être inclus (comme la cédille - ç), vous devez utiliser le mot caractère qui fait la même chose que le précédent, mais qui inclut les signes diacritiques :
^\w+$
Ou
^\w*$
Bien qu'il soit plus verbeux que \w
j'apprécie personnellement la lisibilité des noms de classes de caractères POSIX complets ( http://www.zytrax.com/tech/web/regex.htm#special ), donc je dirais :
^[[:alnum:]_]+$
Cependant, alors que la documentation des liens ci-dessus indique que \w
correspondra à "tout caractère de la plage 0 - 9, A - Z et a - z (équivalent de POSIX [:alnum :])", je n'ai pas trouvé cela vrai. Pas avec grep -P
de toute façon. Vous devez inclure explicitement l'underscore si vous utilisez [:alnum:]
mais pas si vous utilisez \w
. Il n'y a pas mieux que ce qui suit pour faire court et gentil :
^\w+$
- Réponses précédentes
- Plus de réponses