Optimiser une regex

Résolu/Fermé
Cybermate Messages postés 222 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 27 octobre 2018 - Modifié par Cybermate le 26/07/2016 à 02:59
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 27 juil. 2016 à 07:25
Bonjour,

j'utilise depuis très longtemps une regex pour vérifier la conformité des mots de passe avec ces règles suivantes :

- minimum 6 caractères [max 20)
  • dont au moins :

- un chiffre
- une lettre minuscule
- une lettre majuscule

Voici la fameuse regex :
'/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{6,20}$/'


J'ai l'impression, sans forcément être super connaisseur en regex que ceci [0-9a-zA-Z] fait un peu la même chose que cela : (?=.*[a-z])(?=.*[A-Z]).

Ne serait-il pas judicieux de faire plutôt comme ceci :
'/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]){6,20}$/'


Merci de votre aide,
A voir également:

1 réponse

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
26 juil. 2016 à 11:12
Bonjour

pout t'aider il exsite pleins de sites de test de regex.
https://www.google.fr/search?q=regex+online+tester&sourceid=ie7&rls=com.microsoft:fr-FR:IE-Address&ie=&oe=&gfe_rd=cr&ei=uR-XV6K4BYex8we0rLfoBg&gws_rd=ssl

Chaque langage ayant des spécificités dans l'application de l'outil, j'en ai pris un dédié au PHP (que je ne connais pas) pour essayer tes 2 propositions

La première fait ce que tu demandes, à noter que les caractères spéciaux sont exclus.

La deuxième bogue.

[0-9a-zA-Z]{6,20}
signifie une lettre ou un chiffre de 6 à 20 fois
Ce qui équivaut à
\w{6,20}

Mais là tu n'imposes pas qu'il y ait au moins un chiffre et une minuscule et une majuscule peut importe l'ordre.
Il faut donc préciser je veux un chiffre n'importe où, ce qu'impose
(?=.*\d)
et je veux une majuscule n'importe où
(?=.*[A-Z])
et je veux une minuscule n'importe où
(?=.*[a-z])


Donc tu veux la simplifier avec la même politique c'est
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{6,20}$

Maintenant tu pourrais ajouter quelques caractères spéciaux (par exemple ! ( ) { } # ' & ; :)

optionnel
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w!\(\)\{\}#'&;:]{6,20}$


ou obligatoire
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!\(\)\{\}#'&;:])[\w!\(\)\{\}#'&;:]{6,20}$

0
Cybermate Messages postés 222 Date d'inscription samedi 25 juillet 2015 Statut Membre Dernière intervention 27 octobre 2018 21
26 juil. 2016 à 23:16
Merci je comprend un peu mieux du coup. On en fait tellement peu des regex que les oublie facilement.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
27 juil. 2016 à 07:25
De rien
0