Optimiser une regex
Résolu
Cybermate
Messages postés
241
Statut
Membre
-
Utilisateur anonyme -
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)
- un chiffre
- une lettre minuscule
- une lettre majuscule
Voici la fameuse regex :
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 :
Merci de votre aide,
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
-
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}$