CodeS-SourceS
Rechercher un code, un tuto, une réponse

Validation de mot de passe

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 114 fois - Téléchargée 6 fois

Contenu du snippet

Bonjour,

Nouvelle source aujourd'hui, pour vous faire apprendre a manipuler l'analyse par avance dans les expressions rationnelles.

le cadre de l'exercice sera de tester la bonne constitution d'un mot de passe sécurisé.

Un mot de passe valide aura
- de 8 à 15 caractères
- au moins une lettre minuscule
- au moins une lettre majuscule
- au moins un chiffre
- au moins un de ces caractères spéciaux: $ @ % * + - _ !
- aucun autre caractère possible: pas de & ni de { par exemple)

Pas simple a faire n'est-ce pas ?

Il est en fait possible de conditionner un motif.
(?=<CONDITION>)<REGEX>
si ma condition est remplie, la regex sera utilisée pour évaluer la chaine.
Il s'agit en fait d'une "assertion positive avant"
en gros, il FAUT (assertion) que le motif SOIT (POSITIF) reconnu dans la chaine qui SUIT (AVANT) le curseur d'analyse du sujet de la regex.

Les conditions sont en fait des regex classiques, sauf qu'elles ne consomment pas de caractère ; çe qui nous permet de les combiner.

Il est possible de faire une assertion avant ou arrière (selon le moteur de regex utilisé) ; ainsi que des assertions négatives.

par extension, on peut donc faire :

(?=<CONDITION1>)(?=<CONDITION2>)(?=<CONDITION3>)<REGEX>

vous voyez où je veux en venir ?

pour valider les caractères présents, ainsi que la longueur, notre expression est:
^[\w$@%*+\-_!]{8,15}$

mais là, rien ne nous oblige a mettre tel ou tel élément...

aaaaaaaa serait déclaré valide.

en ajoutant une condition :

^(?=.*\d)([a-zA-Z\d$@%*+\-_!]{8,15})$

On s'assure que notre chaine n'a que des caractères autorisés, mais surtout qu'elle contient au moins un chiffre.

en jouant de la même manière pour les autres critères, on obtient alors :

^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[-+!*$@%_])([-+!*$@%_\w]{8,15})$

Source / Exemple :


^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[-+!*$@%_])([-+!*$@%_\w]{8,15})$

Conclusion :


VALIDE
Team017$
Azerty!4

INVALIDE
toto47
team17$
Team17
Inv!7

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.