J'aimerais créer une fonction preg_match
pour valider mes mots de passe, mais je ne sais pas comment l'écrire pour autoriser l'utilisation des caractères spéciaux suivants: !@#$%
.
if(!preg_match(?????)$/', $password))
Voici les règles de mon mot de passe que je veux intégrer dans la regex:
!@#$%
Merci pour toute aide que vous pouvez offrir.
Je pense que cela devrait ressembler à ça:
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $password)) {
echo 'the password does not meet the requirements!';
}
Entre début -> ^
Et fin -> $
de la chaîne il doit y avoir au moins un nombre -> (?=.*\d)
et au moins une lettre -> (?=.*[A-Za-z])
et il doit s'agir d'un chiffre, d'une lettre ou d'un des éléments suivants:! @ # $% -> [0-9A-Za-z!@#$%]
et il doit y avoir 8-12 caractères -> {8,12}
Comme user557846 a commenté votre question, je vous suggère également d'autoriser plus de caractères. En général (si j'utilise un maximum), je prends au moins 50 :)
au fait, vous voudrez peut-être jeter un oeil à ce tutoriel sur les expressions régulières
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[0-9A-Za-z@#\-_$%^&+=§!\?]{8,20}$/',$password)
J'aimais la réponse de r3bel, alors je me suis amusée avec elle et j'ai fini par utiliser la fonction suivante de vérification du mot de passe:
function password_strength_check($password, $min_len = 8, $max_len = 70, $req_digit = 1, $req_lower = 1, $req_upper = 1, $req_symbol = 1) {
// Build regex string depending on requirements for the password
$regex = '/^';
if ($req_digit == 1) { $regex .= '(?=.*\d)'; } // Match at least 1 digit
if ($req_lower == 1) { $regex .= '(?=.*[a-z])'; } // Match at least 1 lowercase letter
if ($req_upper == 1) { $regex .= '(?=.*[A-Z])'; } // Match at least 1 uppercase letter
if ($req_symbol == 1) { $regex .= '(?=.*[^a-zA-Z\d])'; } // Match at least 1 character that is none of the above
$regex .= '.{' . $min_len . ',' . $max_len . '}$/';
if(preg_match($regex, $password)) {
return TRUE;
} else {
return FALSE;
}
}
Les longueurs Max/Min sont par défaut ou ajustables, chaque exigence est activée par défaut, mais peut être désactivée, et je voulais prendre en charge tous les symboles. ensemble de symboles.
J'ai développé une regex complète pour un contrôle un peu plus complexe
/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"]{8,50}$/
En gros, je vérifie que le mot de passe a 1 chiffre, 1 caractère majuscule, 1 caractère inférieur et 1 caractère spécial. J'espère que cela aide quelqu'un à la recherche d'un regex.
C'est ce que j'ai fait avec mon formulaire personnalisé Drupal dans hook_form_validate
. Le mot de passe doit comporter 6 caractères de lettres, chiffres et au moins un caractère spécial.
<?
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]{6,15}$/', $form_state['values']['pass'])) {
form_set_error('pass', t('Password must contain 6 characters of letters, numbers and at least one special character.'));
}
?>
Que ce soit différent, je pense que les utilisateurs peuvent utiliser tous les caractères _SCII valides (32 < ascii_code < 127)
du mot de passe et créé une fonction vérifiant tous les caractères présents dans la table ASCII!
function check($pass, $i = 0){
if(strlen($pass) > $i)
return (0rd(pass[$i]) > 32 and 0rd(pass[$i]) < 127) and check($pass, $i + 1);
}
if(!check($_POST["password"])){
echo "password is wrong";
}
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]
{6,15}$/',($_POST['password']))) {
$message='Password must contain 6 characters of letters, numbers and
at least one special character.';
}