Meine Kriterien für die Kennwortstärke lauten wie folgt:
- 8 Zeichen Länge
- 2 Buchstaben in Großbuchstaben
- 1 Sonderzeichen
(!@#$&*)
- 2 Ziffern
(0-9)
- 3 Buchstaben in Kleinbuchstaben
Kann mir bitte jemand Regex dafür geben? Alle Bedingungen müssen per Passwort erfüllt sein.
password
undhello123
sind gültige Passwörter!").Antworten:
Sie können diese Überprüfungen mit positiven Vorausschau-Aussagen durchführen:
Rubular Link
Erläuterung:
quelle
n
, ersetzen Sie.{8}
durch.{n,}
Sie können positive Look-Aheads mit der Länge Null verwenden, um jede Ihrer Einschränkungen separat anzugeben:
Wenn Ihr Regex - Engine , die nicht unterstützt
\p
Notation und reine ASCII genug ist, dann können Sie ersetzen\p{Lu}
mit[A-Z]
und\p{Ll}
mit[a-z]
.quelle
Die oben angegebenen Antworten sind perfekt, aber ich empfehle , mehrere kleinere Regex anstelle eines großen zu verwenden.
Das Aufteilen des langen regulären Ausdrucks hat einige Vorteile:
Im Allgemeinen hält dieser Ansatz den Code leicht wartbar .
Trotzdem teile ich einen Code, den ich in Swift schreibe, als Beispiel:
quelle
Ich würde vorschlagen, hinzuzufügen
quelle
Die Lösung von codaddict funktioniert einwandfrei, aber diese ist etwas effizienter: (Python-Syntax)
Die negierten Zeichenklassen verbrauchen in einem einzigen Schritt alles bis zum gewünschten Zeichen und erfordern kein Backtracking. (Die Dot-Star-Lösung funktioniert einwandfrei, erfordert jedoch ein gewisses Backtracking.) Bei kurzen Zielzeichenfolgen wie Kennwörtern ist diese Effizienzverbesserung natürlich vernachlässigbar.
quelle
(?#
endet)
. Es gibt keine unausgeglichenen Eltern in dieser Regex.quelle
Die Lösung von @ codaddict wird funktionieren.
Sie sollten auch in Betracht ziehen, einige Ihrer Regeln zu ändern:
Mit den oben genannten Verbesserungen und für mehr Flexibilität und Lesbarkeit würde ich den regulären Ausdruck auf ändern.
Grundlegende Erklärung
Ausführliche Erklärung
Und zu Testzwecken gibt es hier einen Robulink mit dem obigen regulären Ausdruck
quelle
Für PHP funktioniert das gut!
In diesem Fall ist das Ergebnis wahr
Danke für @ridgerunner
quelle
return preg_match("/^(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^0-9]*[0-9]){2}).{8,}$/", 'CaSu4Li8')
?Eine andere Lösung:
quelle
Das Passwort muss mindestens 3 der folgenden 4 Komplexitätsregeln erfüllen:
[mindestens 1 Großbuchstabe (AZ) mindestens 1 Kleinbuchstabe (az) mindestens 1 Ziffer (0-9) mindestens 1 Sonderzeichen - vergessen Sie nicht, Leerzeichen auch als Sonderzeichen zu behandeln]
mindestens 10 Zeichen
höchstens 128 Zeichen
nicht mehr als 2 identische Zeichen hintereinander (z. B. 111 nicht erlaubt)
'^ (?!. (.) \ 1 {2}) ((? =. [Az]) (? =. [AZ]) (? =. [0-9]) | (? =. [Az] ) (? =. [AZ]) (? =. [^ A-zA-Z0-9]) | (? =. [AZ]) (? =. [0-9]) (? =. [^ A. -zA-Z0-9]) | (? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])). {10,127} $ '
(?!. * (.) \ 1 {2})
(? =. [az]) (? =. [AZ]) (? =. * [0-9])
(? =. [az]) (? =. [AZ]) (? =. * [^ a-zA-Z0-9])
(? =. [AZ]) (? =. [0-9]) (? =. * [^ A-zA-Z0-9])
(? =. [az]) (? =. [0-9]) (? =. * [^ a-zA-Z0-9])
{10.127}
quelle
Alle oben genannten Regex haben bei mir leider nicht funktioniert. Die Grundregeln eines starken Passworts sind
Also, Best Regex wäre
Der obige reguläre Ausdruck hat eine Mindestlänge von 8. Sie können ihn von {8,} in { any_number ,} ändern .
Änderung der Regeln?
Nehmen wir an, Sie möchten mindestens x Kleinbuchstaben, y Großbuchstaben, Z- Zeichen, Mindestgesamtlänge w . Dann versuchen Sie es unter Regex
Hinweis: Ändern Sie x , y , z , w in Regex
Bearbeiten: Regex-Antwort aktualisiert
Edit2: Änderung hinzugefügt
quelle
12345678
sind Sie sicher , es ist ein starkes Passwort? Bitte versuchen Sie es vor dem Posten mit Ihrer Regex.