[RESOLU] Probleme controle 'regex'

Eléphant du PHP | 194 Messages

04 mai 2024, 21:41

Bonjour,

Je bloque sur un controle de mot de passe, je souhaite que le mot de passe doit être compris entre 8 et 20 caractéres avec au moins :
1 lettre minuscule
1 lettre majuscule
1 chiffre
1 caractére spéciaux parmis @$!%*?&
peu importe l'ordre :

Voici mon code :

Code : Tout sélectionner

if (empty($motDePasse)) { $error["motDePasse"] = 'Mot de passe obligatoire.'; } elseif (strlen($motDePasse) < 8 || strlen($motDePasse) > 20) { $error["motDePasse"] = 'Le mot de passe doit contenir entre 8 et 20 caractères.'; } elseif (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/', $motDePasse)) { $error["motDePasse"] = 'Mot de passe non conforme.'; }
mais ceci ne fonctionne pas.

Merci par avances pour vos retour et votre aide.
Bonne soirée.
@+ Filou

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 mai 2024, 10:57

Moi j'aurai fait un preg_match() par condition pour que ça reste lisible et + facilement maintenable
Quand tout le reste a échoué, lisez le mode d'emploi...