PHP: Vérification de mot de passe

Fermé
frlobe Messages postés 5 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 4 juin 2010 - 3 avril 2010 à 08:24
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 - 5 avril 2010 à 17:23
Bonjour
je souhaite vérifier que le mot de passe saisi lors d'une inscription contienne des chiffres ET des lettres. J'ai ce code, mais ça ne fonctionne pas comme je le veux ... Une idée ?

if(!preg_match(''^([[:alnum:]]{4,8})$'',$motdepasse))
{
$message .= "- Le mot de passe doit comporter des lettres et des chiffres.<br/>";
};
Merci de vos lumières
A voir également:

2 réponses

Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
Modifié par Giorgiolino le 5/04/2010 à 17:21
Bonjour,

[:alnum:] n'est pas la bonne classe à utiliser car elle inclut les nombres ET les lettres. Or tu veux les distinguer.
Au lieu de ça, tu peux par exemple demander qu'il y ait un chiffre suivi d'une lettre ou l'inverse dans ton mot de passe; Et cela arrivera forcément si dans le mot de passe on exige qu'il y ait les deux.

On obtient donc ceci :


//On vérifie d'abord la longueur du mot de passe 
if(!preg_match("/^(.){4,8}$/",$motdepasse)){ 
    $message .= " -Le mot de passe doit comporter entre 4 et 8 caractères chiffres et lettres<br/>";  
} 
//On vérifie en suite qu'il y a des chiffres et des lettres 
else if(!preg_match("/[a-z][0-9]|[a-z][0-9]/",$motdepasse))   
{   
$message .= " -Le mot de passe doit comporter des lettres et des chiffres.<br/>";   
}


Exercice pour toi : Réécrire le code pour qu'il autorise les majuscules.


Ceci dit, attention à quelques coquilles qu'il y a dans ton code :

1/ Utilisations des simples quotes et des guillemets.


if(!preg_match(''^([[:alnum:]]{4,8})$'',$motdepasse))

Dans les 2 endroits, tu as mis 2 simples quotes (') au lieux de guillemets ("), ça ça ne marche pas.


2/ Caractères inutiles en fin de bloc

{
$message .= "- Le mot de passe doit comporter des lettres et des chiffres.<br/>";
}; <-- celui-ci

Le point-virgule (;)marque la fin d'une instruction.
ex. $message = "bonjour";

Les accolades ({ })délimitent un bloc d'instructions, soit éventuellement plusieurs instructions.
ex.
if ($faim == true) {   
            $action1 = "rentrer maison"; //instruction 1   
            $action2 = "preparer bon repas"; //instruction 2   
            $action3 = "manger sans les doigts"; //instruction 3   

} //pas de point-virgule à la fin de ce bloc 



"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein
3
frlobe Messages postés 5 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 4 juin 2010
4 avril 2010 à 05:24
Bonjour
et merci beaucoup pour cette réponse détaillée et précise. Je me mets de suite au code + je corrige le mien !
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
5 avril 2010 à 17:23
Tu t'en es peut-être aperçu mais il manquait une accolade fermante dans le premier IF.

//On vérifie d'abord la longueur du mot de passe 
if(!preg_match("/^(.){4,8}$/",$motdepasse)) <-- ici
0