Wie ich in einem Kommentar gesagt habe, ist ein Regex mit ziemlicher Sicherheit nicht das richtige Werkzeug für diesen Job. Es wird viel einfacher sein, Code zu schreiben, der über die Zeichen des Passworts iteriert und die Anzahl der Zeichen in jeder Klasse zählt.
Sie haben nicht definiert, was ein "Sonderzeichen" ist. Ich nehme an, dass es sich um ein beliebiges anderes Zeichen als einen Buchstaben oder eine Ziffer (einschließlich Leerzeichen und Steuerzeichen) handelt. Ich nehme auch an, dass sich "Buchstaben" nur auf die 26 Buchstaben des englischen Alphabets bezieht - was bedeutet, dass ein nicht-englischer Buchstabe wie ñ
ein Sonderzeichen ist.
Um ein einfacheres Beispiel zu nehmen, sind Regexes nicht sehr gut darin, Dinge wie "foo und bar in beliebiger Reihenfolge" auszudrücken; Sie müssen beide Reihenfolge explizit angeben:
foo.*bar|bar.*foo
In diesem Fall benötigen Sie 12 verschiedene Auswahlmöglichkeiten. I denke, das ist richtig, aber ich habe es nicht getestet.
[a-z].*[A-Z}|[A-Z].*[a-z}|[a-z].*[0-9]|[0-9].*[a-z]|[a-z].*[^a-zA-Z0-9]|[^a-zA-Z0-9].*[a-z]|[A-Z].*[0-9]|[0-9].*[A-Z]|[A-Z].*[^a-zA-Z0-9]|[^a-zA-Z0-9].*[A-Z]|[0-9].*[^a-zA-Z0-9]|[^a-zA-Z0-9].*[0-9]
Dies ist ein Erep-Stil oder Perl-Regex. grep
erkennt standardmäßig |
nicht; Wenn Sie eine grep
-style regexp benötigen, ersetzen Sie jede |
durch \|
.
Und wenn sich die Anforderungen ändern, sagen wir, mindestens 3 von 5 Klassen von Zeichen erfordern, müssen Sie die Regex vollständig neu schreiben; Sie können es nicht einfach zwicken.
Beachten Sie, dass Ihre Anforderungen immer noch Aa
zulassen.
* mindestens zwei der folgenden * .. bedeutet, dass ein Passwort mit zwei Kleinbuchstaben und zwei Großbuchstaben gültig ist (ohne Zahlen usw.).) ist gültig? –
Schauen Sie [hier] (http://stackoverflow.com/questions/2394092/regex-for-strong-password?rq=1) oder [hier] (http://stackoverflow.com/questions/1254952/regular-expression -for-password? rq = 1) oder vielleicht sogar [hier] (http://stackoverflow.com/questions/2370015/regular-expression-for-password-validation?rq=1). –
Entschuldigung, das Passwort sollte 2 der 4 Zeichengruppen enthalten, also einen Kleinbuchstaben und eine Zahl oder einen Großbuchstaben und eine Nummer usw. –