Mes critères de force de mot de passe sont les suivants:
- Longueur de 8 caractères
- 2 lettres en majuscules
- 1 caractère spécial
(!@#$&*)
- 2 chiffres
(0-9)
- 3 lettres en minuscules
Quelqu'un peut-il me donner une expression régulière pour la même chose. Toutes les conditions doivent être remplies par mot de passe.
password
ethello123
sont des mots de passe valides!").Réponses:
Vous pouvez effectuer ces vérifications à l'aide d'assertions d'anticipation positives:
Lien rubulaire
Explication:
la source
n
, remplacez-le.{8}
par.{n,}
Vous pouvez utiliser des anticipations positives de longueur nulle pour spécifier chacune de vos contraintes séparément:
Si votre moteur regex ne prend pas en charge la
\p
notation et que l'ASCII pur suffit, vous pouvez remplacer\p{Lu}
par[A-Z]
et\p{Ll}
par[a-z]
.la source
Les réponses données ci-dessus sont parfaites, mais je suggère d'utiliser plusieurs expressions régulières plus petites plutôt qu'une grande.
Le fractionnement de l'expression régulière longue présente certains avantages:
En général, cette approche permet de maintenir le code facilement .
Cela dit, je partage un morceau de code que j'écris en Swift à titre d'exemple:
la source
Je suggérerais d'ajouter
la source
La solution de codaddict fonctionne bien, mais celle-ci est un peu plus efficace: (syntaxe Python)
Les classes de caractères annulées consomment tout jusqu'au caractère souhaité en une seule étape, ne nécessitant aucun retour arrière. (La solution dot star fonctionne très bien, mais nécessite un certain retour en arrière.) Bien sûr, avec des chaînes cibles courtes telles que des mots de passe, cette amélioration de l'efficacité sera négligeable.
la source
(?#
et se termine par a)
. Il n'y a pas de parens déséquilibrés dans cette expression régulière.la source
La solution de @ codaddict fonctionnera.
Vous devriez également envisager de modifier certaines de vos règles pour:
Avec les améliorations ci-dessus, et pour plus de flexibilité et de lisibilité, je modifierais l'expression régulière en.
Explication de base
Explication détaillée
Et enfin, à des fins de test, voici un robulink avec le regex ci-dessus
la source
Pour PHP, cela fonctionne très bien!
dans ce cas le résultat est vrai
Thsks pour @ridgerunner
la source
return preg_match("/^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^0-9]*[0-9]){2}).{8,}$/", 'CaSu4Li8')
?Une autre solution:
la source
Le mot de passe doit respecter au moins 3 des 4 règles de complexité suivantes,
[au moins 1 caractère majuscule (AZ) au moins 1 caractère minuscule (az) au moins 1 chiffre (0-9) au moins 1 caractère spécial - n'oubliez pas de traiter également l'espace comme des caractères spéciaux]
au moins 10 caractères
au plus 128 caractères
pas plus de 2 caractères identiques dans une ligne (par exemple, 111 non autorisés)
'^ (?!. (.) \ 1 {2}) ((? =. [Az]) (? =. [AZ]) (? =. [0-9]) | (? =. [Az] ) (? =. [AZ]) (? =. [^ A-zA-Z0-9]) | (? =. [AZ]) (? =. [0-9]) (? =. [^ A -zA-Z0-9]) | (? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])). {10,127} $ '
(?!. * (.) \ 1 {2})
(? =. [az]) (? =. [AZ]) (? =. * [0-9])
(? =. [az]) (? =. [AZ]) (? =. * [^ a-zA-Z0-9])
(? =. [AZ]) (? =. [0-9]) (? =. * [^ A-zA-Z0-9])
(? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])
. {10.127}
la source
Toutes les expressions régulières ci-dessus n'ont malheureusement pas fonctionné pour moi. Les règles de base d'un mot de passe fort sont
Donc, Best Regex serait
L'expression régulière ci-dessus a une longueur minimale de 8. Vous pouvez la changer de {8,} à { any_number ,}
Modification des règles?
disons que vous voulez un minimum de x caractères minuscules, y caractères majuscules, z caractères chiffres, longueur minimale totale w . Ensuite, essayez ci-dessous regex
Remarque: changer x , y , z , w dans regex
Edit: réponse regex mise à jour
Edit2: modification ajoutée
la source
12345678
êtes-vous sûr qu'il s'agit d'un mot de passe fort ? Veuillez essayer votre expression régulière avant de publier.