Regex mot de passe PHP
RésoluDarikl -
Bonjour, je suis un peu naze en Regex donc je voudrais si quelqu'un a ça ou sait faire ça une regex qui valide un mot de passe conforme :
- 12 caractères
- au moins une majuscule
- au moins une minuscule
- au moins un caractère spéciale (@€[$]!?_-...)
Pour faire ça j'utiliserai un preg_match()
J'ai ça mais j'ai remarqué que ça n'accepte pas tous les caractères spéciaux comme le _ :
preg_match('#^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).{12,}$#')
Si vous avez des idées ça pourrait m'aider grandement, merci d'avance.
3 réponses
-
Bonjour,
Déjà, tu peux construire et tester tes regex ici : https://regex101.com/
Ensuite, niveau pattern, tu pourrais partir sur un truc du genre :
(?=.*[!@#$%^&*-_])(?=.*[0-9])(?=.*[A-Z]).{12,30}
-
Bonjour,
Quels sont tes cas de tests ?
Chez moi ces deux chaines matchent bien, je ne vois pas le problème.
rE@1!_8-$1gy rE@1!#8-$1gyJe teste ça ici : https://regex101.com/
-
Bonjour,
je test un mot de passe comme ça Passw0rd261_
qui a tous ce qui faut et ma regex ne match pas alors que si je met ça Passw0rd261- elle va macth ou Passw0rd261! ...
Ok j'ai trouvé
Tu as écrit :
preg_match('#^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).{12,}$#')Alors que tu veux :
preg_match('#^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\w).{12,}$#')La différence est le \w au lieu du \W sur la fin.
EDIT : et même il te faudrait :
preg_match('#^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@€\[$\]!?_-]).{12,}$#')
-
-
La deuxième ne marchait pas mais la troisième correspond parfaitement à ce que je voulais, je te remercie pour la solution.
Cdt,
Darikl