2010-10-29 15 views
2

Je n'arrive pas à faire marcher ça.C# Expression régulière

Je cherche une expression régulière qui validera un mot de passe. Les caractères autorisés sont a-zA-Z0-9, mais la séquence doit comporter au moins 1 chiffre et 1 lettre majuscule.

Est-ce que cela peut être fait?

+0

double possible de [Aide avec mot de passe complexe regex] (http://stackoverflow.com/questions/2582079/help-with-password-complexity -regex) –

Répondre

2
^(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]+$ 

devrait faire.

^    # start of string 
(?=.*[A-Z]) # assert that there is at least one capital letter ahead 
(?=.*[0-9]) # assert that there is at least one digit ahead 
[A-Za-z0-9]+ # match any number of allowed characters 
       # Use {8,} instead of + to require a minimum length of 8 characters. 
$    # end of string 
0

Vous pouvez utiliser non-zero-width lookahead/lookbehind assertions dans regex. Par exemple:

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$ 

Exige qu'il existe au moins un nombre, une lettre minuscule et une lettre majuscule. L'utilisation de \w vous permet d'accepter des caractères non anglais ou accentués (que vous pouvez ou ne voulez pas autoriser). Sinon, utilisez [a-zA-Z] à la place.

+0

Cela permet beaucoup plus que l'OP voulu ('\ w' est Unicode-conscient dans .NET) - bien que bien sûr, la restriction de lettres valides pour un * mot de passe * n'a pas beaucoup de sens non plus. –

+0

@Tim Pietzcker: Oui, je sais. Je mentionne que '\ w' acceptera les caractères de mots accentués et internationaux de l'ensemble Unicode. C'est une alternative à l'utilisation de la construction [a-zA-Z]. – LBushkin

+0

Désolé, je n'ai pas lu votre réponse assez attentivement. Mais '\ w' correspond aussi aux chiffres et au trait de soulignement (et aux autres caractères de" ponctuation qui continue le mot "). –

0
bool valid = 
    Regex.IsMatch(password, @"\w+")// add additional allowable characters here 
    && Regex.IsMatch(password, @"\d") 
    && Regex.IsMatch(password, @"\p{Lu}");