Password validation regex
Ich versuche einen regulären Ausdruck, der das folgende tut:
- stellt sicher, dass es kein white-space-Zeichen
- minimale Länge von 8
- stellt sicher, dass es mindestens:
- eine nicht-alpha-Zeichen
- eines Großbuchstabens
- einem Kleinbuchstaben
Fand ich diesen regulären Ausdruck:
((?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])(?!\s).{8,})
kümmert sich um die Punkte 2 und 3 oben, aber wie füge ich die erste Bedingung, um die oben genannten regex-Ausdruck?
Ich weiß, dass ich tun kann, zwei Ausdrücke, die eines über und dann
\s
aber ich hätte es gern alles in einem, ich habe versucht zu tun, so etwas wie ?!\s
aber ich konnte es nicht zu funktionieren. Irgendwelche Ideen?
- Was die Zielsprache? Ich habe gesehen, diese Frage vor (kann es nicht finden) und die Lösung war die Aufteilung der Validierung in mehreren Schritten (also nicht nur ein regex).
Du musst angemeldet sein, um einen Kommentar abzugeben.
tun sollte. Seien Sie sich bewusst, obwohl, dass sind Sie nur die Validierung von ASCII-Buchstaben. Ist
Ä
kein Brief für Ihre Anforderungen?\S
bedeutet "jedes beliebige Zeichen außer whitespace", also durch die Nutzung dieser statt des Punktes und durch die Verankerung der regex am Anfang und Ende der Zeichenfolge, stellen wir sicher, dass der string enthält keine Leerzeichen.Ich habe auch entfernt die unnötigen Klammern um den gesamten Ausdruck.
(?=.*[A-Z])
Teil sichergestellt. (Es sei denn, Sie eine case-insensitive flag außerhalb der regex irgendwo, natürlich).(?=.*[^a-zA-Z])
dann(?=.*[a-z])
und(?=.*[A-Z])
. Nicht die erste, die Arbeit tun die anderen 2?^
am start des Klasse?^
negiert der Inhalt des Charakter-Klasse. Werfen Sie einen Blick auf das tutorial hatte ich im Zusammenhang mit oben.[^a-zA-Z]
entspricht einem einzelnen Zeichen, die nicht ASCII-Buchstaben.Tim ' s Antwort funktioniert gut und ist eine gute Erinnerung daran, dass es viele Wege gibt, dieses problem zu lösen, die mit regexes, aber Sie waren auf den richtigen Weg zu finden selbst eine Lösung. Wenn Sie hatte geändert (?!\s) zu (?!.*\s) und fügte hinzu, die ^ und $ Anker zu Ende, es würde funktionieren.