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


Je voudrais avoir une expression régulière qui vérifie si une chaîne ne contient que des lettres majuscules et minuscules, des chiffres et des traits de soulignement.


448
2017-12-03 04:25


origine


Réponses:


Pour faire correspondre une chaîne qui contient seulement ces caractères (ou une chaîne vide), essayez

"^[a-zA-Z0-9_]*$"

Cela fonctionne pour les expressions régulières .NET et probablement beaucoup d'autres langues.

Briser:

^ : 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 *.

MODIFIER Comme d’autres l’ont souligné, certaines langues de regex ont une forme abrégée pour [a-zA-Z0-9_]. Dans le langage regex .NET, vous pouvez activer le comportement ECMAScript et utiliser \w comme un raccourci (rapportant ^\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 correspondre seulement ces caractères, en utilisant la forme explicite (plus longue) est probablement le meilleur.


753
2017-12-03 04:33



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. (sauf si nous introduisons unicode au mix)

En utilisant le + quantifier vous correspondez à un ou plusieurs caractères. Si vous voulez aussi accepter une chaîne vide, utilisez * au lieu.


240
2017-12-05 05:25



Vous voulez vérifier que chaque caractère correspond à vos besoins, 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, 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

$

Pour indiquer que la chaîne doit se terminer par ce caractère. Ensuite, utilisez

\w+ or \w*

Pour indiquer "1 ou plus", ou "0 ou plus". En réunissant tout cela, nous avons:

^\w*$

32
2017-12-03 05:08



Bien que ce soit plus bavard que \w, J'apprécie personnellement la lisibilité des noms de classe de caractères POSIX ( http://www.zytrax.com/tech/web/regex.htm#special ), alors je dirais:

^[[:alnum:]_]+$

Cependant, alors que la documentation aux liens ci-dessus indique que \w "Correspondra à tout caractère compris entre 0 et 9, A - Z et a - z (équivalent de POSIX [: alnum:])", je n'ai pas trouvé cela vrai. Pas avec grep -P en tous cas. Vous devez inclure explicitement le trait de soulignement si vous utilisez [:alnum:] mais pas si vous utilisez \w. Vous ne pouvez pas battre ce qui suit pour court et doux:

^\w+$

Avec la lisibilité, en utilisant les classes de caractères POSIX (http://www.regular-expressions.info/posixbrackets.html) signifie que votre regex peut travailler sur des chaînes non ASCII, ce que ne feront pas les expressions rationnelles basées sur la gamme puisqu'elles reposent sur l'ordre sous-jacent des caractères ASCII qui peuvent être différents des autres jeux de caractères. des lettres telles que œ) que vous pourriez vouloir capturer.


20
2018-06-09 22:53



Um ... question: faut-il avoir au moins un caractère ou non? Peut-il être une chaîne vide?

^[A-Za-z0-9_]+$

Fait au moins une majuscule ou une minuscule alphanumérique ou un trait de soulignement. S'il peut être de longueur nulle, remplacez simplement le + par *

^[A-Za-z0-9_]*$

Modifier:

Si des signes diacritiques doivent être inclus (comme cedilla - ç) alors vous devrez utiliser le caractère de mot qui fait la même chose que ci-dessus, mais inclut les caractères diacritiques:

^\w+$

Ou

^\w*$

19
2017-12-03 04:31



En informatique, une valeur alphanumérique signifie souvent que le premier caractère n'est pas un nombre mais un alphabet ou un trait de soulignement. Ensuite, le personnage peut être 0-9, A-Z, a-zou souligner (_).

Voici comment vous feriez cela:

Testé sous php:

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

ou prends ça

^[A-Za-z_][A-Za-z\d_]*$

et placez-le dans votre langage de développement.


12
2018-01-31 13:38



Que diriez-vous:

^([A-Za-z]|[0-9]|_)+$

... si vous voulez être explicite, ou:

^\w+$

... si vous préférez concise (syntaxe Perl).


10
2017-12-03 04:31



Utilisez des lookaheads pour faire le "au moins un" truc. Croyez-moi, c'est beaucoup plus facile.

Voici un exemple qui nécessiterait de 1 à 10 caractères, contenant au moins un chiffre et une lettre:

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

NOTE: on aurait pu utiliser \ w mais les considérations ECMA / Unicode entrent en jeu augmentant la couverture de caractère du \ w "caractère de mot".


10
2017-11-12 18:20