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.

21voto

Drew Hall Points 15917

Pourquoi pas :

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

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

^\w+$

...si vous préférez la concision (syntaxe Perl).

21voto

Danuel O'Neal Points 66

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.

14voto

boooloooo Points 69

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

10voto

Shantanu Points 51

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();

8voto

Jay Points 20373

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";
}

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