119 votes

Regexp Java pour la validation des mots de passe

Je suis en train de créer un regexp pour la validation des mots de passe qui sera utilisé dans une application Java comme paramètre de configuration.

Le regexp est :

^.*(?=.{8,})(?=..*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$

La politique de mot de passe est :

  • Au moins 8 caractères

  • Contient au moins un chiffre

  • Contient au moins un caractère alpha inférieur et un caractère alpha supérieur.

  • Contient au moins un caractère dans un ensemble de caractères spéciaux ( @#%$^ etc.)

  • Ne contient pas d'espace, de tabulation, etc.

Il ne me manque que le point 5. Je n'arrive pas à faire vérifier par la regexp les espaces, les tabulations, les retours de chariot, etc.

Quelqu'un peut-il m'aider ?

4 votes

Les règles relatives aux mots de passe sont mauvaises. Veuillez consulter Référence - Validation du mot de passe pour plus d'informations.

2voto

Aaron Digulla Points 143830

Prenez un peu de recul. Pourquoi restreindre les caractères spéciaux ? Qu'est-ce qui ne va pas avec l'underscore, par exemple ? Votre BD ne peut pas gérer les espaces ?

Si votre base de données peut gérer n'importe quel code de caractères, vous devriez autoriser vos utilisateurs à utiliser n'importe quel caractère dans le mot de passe. Par exemple, hörgh3 est un mot de passe très sûr, car la plupart des claviers dans le monde n'ont tout simplement pas de fonction ö

2voto

Koray Güclü Points 933

Si vous souhaitez voir un exemple, vous pouvez consulter ce lien http://howtodoinjava.com/2012/12/14/how-to-build-regex-based-password-validator-in-java/

mkyong a aussi un bon exemple sur ce sujet, vous pouvez le trouver ici. http://www.mkyong.com/regular-expressions/how-to-validate-password-with-regular-expression/

1voto

Andrew Points 11

Mot de passe requis :

  • Le mot de passe doit comporter au moins huit (8) caractères lorsque le système peut le supporter.
  • Les mots de passe doivent comprendre des caractères d'au moins deux (2) de ces groupes : caractères alphabétiques, numériques et spéciaux.

    ^.*(?=.{8,})(?=.*\d)(?=.*[a-zA-Z])|(?=.{8,})(?=.*\d)(?=.*[!@#$%^&])|(?=.{8,})(?=.*[a-zA-Z])(?=.*[!@#$%^&]).*$

Je l'ai testé et il fonctionne

1voto

Pour toute personne intéressée par les exigences minimales pour chaque type de personnage, je suggère de faire l'extension suivante par rapport à la réponse acceptée de Tomalak :

^(?=(.*[0-9]){%d,})(?=(.*[a-z]){%d,})(?=(.*[A-Z]){%d,})(?=(.*[^0-9a-zA-Z]){%d,})(?=\S+$).{%d,}$

Notez qu'il s'agit d'une chaîne de formatage et non du motif regex final. Remplacez simplement %d par les occurrences minimales requises pour : les chiffres, les minuscules, les majuscules, les caractères non numériques et le mot de passe entier (respectivement). Les occurrences maximales sont peu probables (à moins que vous ne souhaitiez un maximum de 0, rejetant ainsi tout caractère de ce type), mais elles peuvent également être facilement ajoutées. Remarquez le regroupement supplémentaire autour de chaque type, de sorte que les contraintes min/max permettent des correspondances non consécutives. Cela a fonctionné à merveille pour un système dans lequel nous pouvions configurer de manière centralisée le nombre de caractères de chaque type dont nous avions besoin, puis faire en sorte que le site web et deux plateformes mobiles différentes récupèrent ces informations afin de construire le motif regex sur la base de la chaîne de formatage ci-dessus.

1voto

Ansu Points 17

Celui-ci vérifie tous les caractères spéciaux :

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=\S+$).*[A-Za-z0-9].{8,}$

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X