Envoyé par
sinzen
- Une majuscule
- Une minuscule
- et ces cacharactère spéciaux @#$%
- Un chiffre
le regex:
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%])
Merci d'être précis et exhaustif dans ta description. D'autre part, cette pattern devrait être ancrée au début de la chaîne avec ^, car si la chaîne ne répond pas aux critères, la pattern sera testée inutilement à toutes les positions de la chaîne de caractères avant d'échouer.
Envoyé par
sinzen
^(?=[a-zA-Z0-9@#$%]{1,2}$)
Ceci ne détectera pas un caractère répété et encore moins 2. La pattern pour un caractère répété utilise un groupe de capture et une référence à cette capture. Par exemple: (.)\1. Donc pour deux répétitions, ça sera (.)\1{2}.
Pour l'interdire, au lieu d'utiliser un test avant (lookahead), utilise un test avant négatif (negative lookahead) (?!...) que tu peux agglutiner aux autres comme tu l'as fait depuis le début:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%])(?!.*(.)\1{2})
Aussi, si tu en as terminé avec tes conditions, tu peux très bien sortir l'une d'elle de son test avant (uniquement parmi celle qui sont positives), par exemple:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%])(?!.*(.)\1{2}).*\d
ou
^(?=.*\d)(?=.*[A-Z])(?=.*[@#$%])(?!.*(.)\1{2}).*[a-z]
À propos des mots de passe en général, inutile de se torturer avec des mélanges biscornus de caractères, car en définitive et au grand damne de certains: c'est la taille qui compte.
Partager