La solution de @ codaddict fonctionnera.
Vous devriez également envisager de modifier certaines de vos règles pour:
- Ajoutez plus de caractères spéciaux, c'est-à-dire%, ^, (,), -, _, + et point. J'ajoute tous les caractères spéciaux que vous avez manqués au-dessus des signes numériques dans les claviers américains. Échappez à ceux que les regex utilisent.
- Faites le mot de passe de 8 caractères ou plus. Pas seulement un nombre statique 8.
Avec les améliorations ci-dessus, et pour plus de flexibilité et de lisibilité, je modifierais l'expression régulière en.
^(?=.*[a-z]){3,}(?=.*[A-Z]){2,}(?=.*[0-9]){2,}(?=.*[!@#$%^&*()--__+.]){1,}.{8,}$
Explication de base
(?=.*RULE){MIN_OCCURANCES,} Each rule block is shown by (){}. The rule and number of occurrences can then be easily specified and tested separately, before getting combined
Explication détaillée
^ start anchor
(?=.*[a-z]){3,} lowercase letters. {3,} indicates that you want 3 of this group
(?=.*[A-Z]){2,} uppercase letters. {2,} indicates that you want 2 of this group
(?=.*[0-9]){2,} numbers. {2,} indicates that you want 2 of this group
(?=.*[!@#$%^&*()--__+.]){1,} all the special characters in the [] fields. The ones used by regex are escaped by using the \ or the character itself. {1,} is redundant, but good practice, in case you change that to more than 1 in the future. Also keeps all the groups consistent
{8,} indicates that you want 8 or more
$ end anchor
Et enfin, à des fins de test, voici un robulink avec le regex ci-dessus