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.

Pour faire correspondre une chaîne contenant 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 pour beaucoup d’autres langages.

Le décomposer:

 ^ : start of ssortingng [ : beginning of character group az : any lowercase letter AZ : any uppercase letter 0-9 : any digit _ : underscore ] : end of character group * : zero or more of the given characters $ : end of ssortingng 

Si vous ne voulez pas autoriser les chaînes vides, utilisez + au lieu de *.

EDIT Comme d’autres l’ont fait remarquer, certains langages 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 tant que raccourci (générant ^\w*$ ou ^\w+$ ). Notez que dans d’autres langages, 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 ne faire correspondre que 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. (sauf si nous introduisons l’unicode dans le mix)

En utilisant le quantificateur + vous correspondez à un ou plusieurs caractères. Si vous souhaitez également accepter une chaîne vide, utilisez plutôt * .

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 versions 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. Puis utilisez

 \w+ or \w* 

Pour indiquer “1 ou plus”, ou “0 ou plus”. En mettant tout cela ensemble, nous avons:

 ^\w*$ 

Bien que ce soit plus verbeux que \w , j’apprécie personnellement la lisibilité de tous les noms de classes 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 à n’importe quel caractère compris entre 0 et 9, A-Z et a-z (équivalent de POSIX [: alnum:]) “, je n’ai pas trouvé Sois sincère. Pas avec grep -P quand même. 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 le court et le doux:

 ^\w+$ 

En plus de la lisibilité, l’utilisation des classes de caractères POSIX ( http://www.regular-expressions.info/posixbrackets.html ) signifie que votre regex peut fonctionner sur des chaînes non ASCII, ce que les expressions rationnelles basées sur la plage ne feront pas car elles reposent sur l’ordre sous-jacent des caractères ASCII qui peuvent être différents des autres jeux de caractères et exclura donc certains caractères non-ASCII (des lettres telles que œ) que vous pourriez vouloir capturer.

Um … question: Faut-il 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. Si la longueur peut être nulle, remplacez simplement le + par *

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

Modifier:

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

 ^\w+$ 

Ou

 ^\w*$ 

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 caractère peut être 0-9 , AZ , az ou un trait de soulignement ( _ ).

Voici comment tu ferais ça:

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.

Que diriez-vous:

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

… si vous voulez être explicite, ou:

 ^\w+$ 

… si vous préférez concis (syntaxe Perl).

utiliser des “lookaheads” pour faire “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: aurait pu utiliser \ w mais les considérations ECMA / Unicode entrent alors en jeu, augmentant la couverture des caractères du mot “w”.

Essayez ces extensions multilingues pour cordes.

IsAlphaNumeric – La chaîne doit contenir au moins 1 alpha (lettre dans la plage Unicode, spécifiée dans charSet) et au moins 1 nombre (spécifié dans numSet). En outre, la chaîne ne doit comporter que des caractères alphanumériques.

IsAlpha – Ssortingng doit contenir au moins 1 alpha (dans le jeu de caractères spécifié) et ne comporter que des caractères alpha.

IsNumeric – Ssortingng doit contenir au moins 1 nombre (dans la langue numSet spécifiée) et ne comporter que des nombres.

La plage charSet / numSet pour la langue souhaitée peut être spécifiée. Les gammes Unicode sont disponibles sur le lien ci-dessous:

http://www.ssec.wisc.edu/~tomw/java/unicode.html

API:

  public static bool IsAlphaNumeric(this ssortingng ssortingngToTest) { //English const ssortingng charSet = "a-zA-Z"; const ssortingng numSet = @"0-9"; //Greek //const ssortingng charSet = @"\u0388-\u03EF"; //const ssortingng numSet = @"0-9"; //Bengali //const ssortingng charSet = @"\u0985-\u09E3"; //const ssortingng numSet = @"\u09E6-\u09EF"; //Hindi //const ssortingng charSet = @"\u0905-\u0963"; //const ssortingng numSet = @"\u0966-\u096F"; return Regex.Match(ssortingngToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success; } public static bool IsNumeric(this ssortingng ssortingngToTest) { //English const ssortingng numSet = @"0-9"; //Hindi //const ssortingng numSet = @"\u0966-\u096F"; return Regex.Match(ssortingngToTest, @"^[" + numSet + @"]+$").Success; } public static bool IsAlpha(this ssortingng ssortingngToTest) { //English const ssortingng charSet = "a-zA-Z"; return Regex.Match(ssortingngToTest, @"^[" + charSet + @"]+$").Success; } 

Utilisation:

  //English ssortingng test = "AASD121asf"; //Greek //ssortingng test = "Ϡϛβ123"; //Bengali //ssortingng test = "শর৩৮"; //Hindi //ssortingng test = @"क़लम३७ख़"; bool isAlphaNum = test.IsAlphaNumeric(); 

L’expression rationnelle suivante correspond aux caractères alphanumériques et au trait de soulignement:

 ^[a-zA-Z0-9_]+$ 

Par exemple, dans Perl:

 #!/usr/bin/perl -w my $arg1 = $ARGV[0]; # check that the ssortingng contains *only* one or more alphanumeric chars or underscores if ($arg1 !~ /^[a-zA-Z0-9_]+$/) { print "Failed.\n"; } else { print "Success.\n"; } 

Pour moi, il y avait un problème en ce sens que je voulais faire la distinction entre alpha, numeric et alpha numeric, donc pour garantir qu’une chaîne alphanumérique contienne au moins un alpha et au moins un numérique, j’ai utilisé:

 ^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$ 

Pour ceux qui recherchent la correspondance alphanumérique unicode, vous pouvez faire quelque chose comme:

 ^[\p{L} \p{Nd}_]+$ 

Lectures supplémentaires à http://unicode.org/reports/tr18/ et à http://www.regular-expressions.info/unicode.html

Voici le regex pour ce que vous voulez avec un quantificateur pour spécifier au moins 1 caractère et pas plus de 255 caractères

[^ a-zA-Z0-9 _] {1,255}

faire correspondre les signes diacritiques dans une expression rationnelle ouvre toute une boîte de vers, en particulier lorsque l’on considère Unicode. Vous voudrez peut-être en savoir plus sur les locales Posix.

Pour vérifier la chaîne entière et ne pas autoriser les chaînes vides, essayez

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

cela fonctionne pour moi, vous pouvez essayer [\ p {Alnum} _]

^ \ w * $ fonctionnera pour la combinaison ci-dessous 1 123 1av pRo av1