RegEx pour vous assurer que la chaîne contient au moins un caractère minuscule, un caractère majuscule, un chiffre et un symbole

Quelle est la regex pour vous assurer qu’une chaîne donnée contient au moins un caractère de chacune des catégories suivantes?

  • Caractère minuscule
  • Caractère majuscule
  • Chiffre
  • symbole

Je connais les patterns pour les sets individuels à savoir [az] , [AZ] , \d et _|[^\w] (je les ai bien compris, non?).

Mais comment puis-je les combiner pour m’assurer que la chaîne contient tout cela dans n’importe quel ordre?

Si vous avez besoin d’une seule expression régulière, essayez:

 (?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*\W) 

Une courte explication:

 (?=.*[az]) // use positive look ahead to see if at least one lower case letter exists (?=.*[AZ]) // use positive look ahead to see if at least one upper case letter exists (?=.*\d) // use positive look ahead to see if at least one digit exists (?=.*\W]) // use positive look ahead to see if at least one non-word character exists 

Et je suis d’accord avec SilentGhost, \W pourrait être un peu large. Je le remplacerais par un jeu de caractères comme ceci: [-+_!@#$%^&*.,?] (N’hésitez pas à en append bien sûr!)

Vous pouvez associer ces trois groupes séparément et vous assurer qu’ils sont tous présents. Aussi, [^\w] semble un peu trop large, mais si c’est ce que vous voulez, vous voudrez peut-être le remplacer par \W

Bart Kiers, votre regex a quelques problèmes. La meilleure façon de le faire est la suivante:

 (.*[az].*) // For lower cases (.*[AZ].*) // For upper cases (.*\d.*) // For digits 

De cette façon, vous cherchez, peu importe si au début, à la fin ou au milieu. Dans votre cas, j’ai beaucoup de problèmes avec les mots de passe complexes.