Optimiser une regex

Résolu
Cybermate Messages postés 241 Statut Membre -  
 Utilisateur anonyme -
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,

1 réponse

  1. Utilisateur anonyme
     
    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
    1. Cybermate Messages postés 241 Statut Membre 21
       
      Merci je comprend un peu mieux du coup. On en fait tellement peu des regex que les oublie facilement.
      0
    2. Utilisateur anonyme
       
      De rien
      0