-
Regex pour mot de passe
Bonjour,
Je cherche la regex pour imposer un mot de passe de minimum 7 caractères, avec chiffres et lettres.
Pour cela j'ai réussi avec '/[a-zA-Z]|[0-9]{7,}/'
mais je voudrais imposer au moins 1 chiffre et au moins 1 lettre par exemple, et là je bloque...
Merci de votre aide.
Vince
-
j'ai finalement découpé comme ceci :
Code:
if(!\preg_match("/[a-zA-Z]/", $data['pwd']) || !\preg_match("/[0-9]/", $data['pwd']) || strlen($data['pwd']) < 7){
-
Pour faire ça je te propose 2 patterns, soit
Code:
$pattern = '~\A(?=.{7})(?>[0-9]+|[a-z]+)[[:alnum:]]+\z~i';
soit
Code:
$pattern = '~\A(?=[a-z]++[0-9]|[0-9]++[a-z])[[:alnum:]]{7,}\z~i';
- avantage de la première: elle échoue vite s'il y a moins de 7 caractères.
- avantage de la deuxième: elle échoue vite s'il n'y a pas un chiffre suivit d'une lettre ou le contraire dans les premiers caractères.
Entre les deux mon cœur balance plutôt pour la première, mais à peu de chose près, elles se valent.
\A et \z sont les ancres de début et de fin de chaîne.
(?=...) est un test avant (lookahead) et signifie suivi de.
[:alnum:] est une classe de caractère qui contient tous les lettres et les chiffres ascii.
(?>...) est un groupe atomique, c'est comme un groupe non-capturant sauf qu'une fois la parenthèse fermée, le moteur de regex ne peut plus reculer dans les caractères du groupe pour tester d'autres solutions.
++ est un quantificateur possessif, même chose que précédemment.