Existe-t-il une expression régulière qui vérifie si une chaîne ne contient que des lettres majuscules et minuscules, des chiffres et des underscores _
?
Pour trouver:
"^[a-zA-Z0-9_]*$"
Voir le demo.
Cela fonctionne pour les expressions régulières .NET, et probablement pour un grand nombre d’autres langages.
Explication :
- ^ : début de la chaîne de caractères
- [ : début d’un groupe de caractères
- a-z : toute lettre minuscule
- A-Z : toute lettre majuscule
- 0-9 : tout chiffre
- _ : underscores
- ] : fin du groupe de caractères
- * : zéro ou plusieurs caractères donnés
- $ : fin de la chaîne de caractères
Si vous ne souhaitez pas autoriser les chaînes vides, utilisez + au lieu de *.
très courte:
/^\w+$/
\w
est équivalent à [A-Za-z0-9_]
.
L’utilisation du quantificateur +
permet de trouver 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 besoins, c’est pourquoi nous utilisons :
[A-Za-z0-9_]
Vous pouvez même utiliser la version abrégée :
\w
Ce qui est équivalent (dans certaines versions de regex, donc vérifiez 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 ensuite
\w+ ou \w*
Pour indiquer « 1 ou plus », ou « 0 ou plus ». Si l’on met tout cela bout à bout, on obtient :
^\w*$
Utiliser
^([A-Za-z]|[0-9]|_)+$
…si vous voulez être explicite, ou… :
^\w+$
…si vous préférez la syntaxe concise (syntaxe Perl).
Voici comment procéder en PHP :
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
Je pense que vous ne prenez pas en compte les caractères Unicode dans vos tests.
Par exemple, si vous devez prendre des caractères « é », « ã » ou « ü », l’utilisation de « \w » ne fonctionnera pas.
Vous pouvez utiliser cette RegEx:
^[A-ZÀ-Ýa-zà-ý0-9_]+$