it-swarm.com.de

Erstellen Sie preg_match für die Kennwortüberprüfung (! @ # $%).

Ich möchte eine preg_match-Funktion erstellen, um meine Passowrds zu überprüfen, aber ich bin nicht sicher, wie ich sie schreiben soll, damit die folgenden Sonderzeichen verwendet werden können: [email protected]#$%.

if(!preg_match(?????)$/', $password))

Hier sind meine Passwortregeln, die ich in die Regex einarbeiten möchte:

  • Kann Buchstaben und Zahlen enthalten
  • Muss mindestens eine Zahl und einen Buchstaben enthalten
  • Kann eines der folgenden Zeichen enthalten: [email protected]#$%
  • Muss aus 8-12 Zeichen bestehen

Vielen Dank für jede Hilfe, die Sie anbieten können.

9
Mark Rummel

Ich denke, das sollte so aussehen:

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) {
    echo 'the password does not meet the requirements!';
}

Zwischen dem Start -> ^
Und ende -> $
der Zeichenfolge muss mindestens eine Zahl vorhanden sein -> (?=.*\d)
und mindestens einen Buchstaben -> (?=.*[A-Za-z])
und es muss eine Zahl, ein Buchstabe oder eine der folgenden sein:! @ # $% -> [[email protected]#$%]
und es müssen 8-12 Zeichen sein -> {8,12}

Als user557846 Ihre Frage kommentierte, würde ich Ihnen auch vorschlagen, mehr Zeichen zuzulassen. Ich nehme normalerweise (wenn ich maximal benutze) mindestens 50 :)

Übrigens, vielleicht möchten Sie einen Blick auf dieses Regex-Tutorial werfen.

47
r3bel
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[[email protected]#\-_$%^&+=§!\?]{8,20}$/',$password)
  • mindestens ein Kleinbuchstabe
  • mindestens ein Großbuchstabe
  • mindestens eine Ziffer
  • mindestens ein besonderes Zeichen von @ # -_ $% ^ & + = § !?
8
Thomas

Ich mochte die Antwort von r3bel, also spielte ich damit und endete mit der folgenden Funktion als Passwortüberprüfung:

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;
    }
}

Max/Min-Längen sind voreingestellt oder einstellbar. Jede Anforderung ist standardmäßig aktiviert. Sie kann jedoch deaktiviert werden. Ich wollte alle Symbole unterstützen. Die letzte Anforderung lautet "alles, was nicht zu den oben genannten Typen gehört" und nicht ein feststehender Satz von Symbolen.

2
David Bell

Ich habe einen kompletten Regex für etwas komplexere Prüfungen entwickelt

/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"]{8,50}$/

Grundsätzlich überprüfe ich, ob das Passwort 1 Ziffer, 1 Groß-, 1 Unter- und 1 Sonderzeichen hat. Ich hoffe, das hilft jemandem, der nach einer Regex sucht.

1
Morpheus_ro

Ich habe dies mit meinem benutzerdefinierten Drupal-Formular in hook_form_validate gemacht. Das Passwort sollte aus 6 Buchstaben, Ziffern und mindestens einem Sonderzeichen bestehen.

<?
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%]{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.'));
}
?>
0

Ein anderer Weg

Anders ausgedrückt, ich glaube, dass Benutzer alle ASCII gültigen Zeichen (32 < ascii_code < 127) im Kennwort verwenden können und eine Funktion erstellt haben, die alle in ASCII Tabelle enthaltenen Zeichen überprüft!

function check($pass, $i = 0){
     if(strlen($pass) > $i)
         return (0rd(pass[$i]) > 32 and 0rd(pass[$i]) < 127) and check($pass, $i + 1);
}

Verwendungszweck

if(!check($_POST["password"])){
    echo "password is wrong";
}
0
Amir Forsati
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%]
{6,15}$/',($_POST['password']))) {
    $message='Password must contain 6 characters of letters, numbers and 
    at least one special character.';
}
0
bhupinder singh