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?
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.