701 votes

Expression régulière pour les caractères alphanumériques et les caractères de soulignement

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.

1098voto

Charlie Points 17807

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).

405voto

kch Points 25855

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.

46voto

Anton Points 670

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*$

36voto

BenAlabaster Points 20189

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*$

36voto

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+$

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X