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?J'y jette un coup d'œil correct.
Rappelez-vous qu'en informatique, une valeur alphanumérique signifie que le premier caractère est un alphabet ou un trait de soulignement. Ensuite, le caractère peut être 0-9
, A-Z
, a-z
ou le trait de soulignement ( _
). Testé sous php :
$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'
ou prenez ceci
^[A-Za-z_][A-Za-z\d_]*$
et le placer dans votre langage de développement.
Utiliser les lookaheads pour faire le truc du "au moins un". 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 ensuite les considérations ECMA/Unicode entrent en jeu, augmentant la couverture de caractères de l'option \w "Caractère du mot".
Essayez ces extensions multilingues que j'ai réalisées pour la ficelle.
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 alphabétiques et des chiffres.
IsAlpha - La chaîne doit contenir au moins un alpha (dans la langue spécifiée par le charSet) et ne comporter que des alpha.
IsNumeric - La chaîne de caractères doit contenir au moins un chiffre (dans la langue spécifiée par le numSet) et être composée uniquement de chiffres.
La plage charSet/numSet pour la langue souhaitée peut être spécifiée. Les plages Unicode sont disponibles sur le lien ci-dessous :
http://www.ssec.wisc.edu/~tomw/java/unicode.html
API :
public static bool IsAlphaNumeric(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
const string numSet = @"0-9";
//Greek
//const string charSet = @"\u0388-\u03EF";
//const string numSet = @"0-9";
//Bengali
//const string charSet = @"\u0985-\u09E3";
//const string numSet = @"\u09E6-\u09EF";
//Hindi
//const string charSet = @"\u0905-\u0963";
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
}
public static bool IsNumeric(this string stringToTest)
{
//English
const string numSet = @"0-9";
//Hindi
//const string numSet = @"\u0966-\u096F";
return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
}
public static bool IsAlpha(this string stringToTest)
{
//English
const string charSet = "a-zA-Z";
return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
}
Utilisation :
//English
string test = "AASD121asf";
//Greek
//string test = "Ϡϛβ123";
//Bengali
//string test = "শর৩৮";
//Hindi
//string test = @"क़लम३७ख़";
bool isAlphaNum = test.IsAlphaNumeric();
La regex suivante correspond aux caractères alphanumériques et au trait de soulignement :
^[a-zA-Z0-9_]+$
Par exemple, en Perl :
#!/usr/bin/perl -w
my $arg1 = $ARGV[0];
# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
print "Failed.\n";
} else {
print "Success.\n";
}