Hallo,
In einem alten Programmcode, den ich bearbeiten muss, finde ich folgenden Regex und kann mir diese nicht erklären.
[1]*(?=[A-Za-z0-9]{8,})(?=[A-Za-z0-9]*[0-9])(?=[A-Za-z0-9]*[a-z])(?=[A-Za-z0-9]*[A-Z])[A-Za-z0-9]*$
- Stringanfang
- Beliebig viele Wortzeichen (man könnte auch \w schreiben)
- Lookahead: 8 oder mehr Wortzeichen gefolgt von einer Ziffer
- Lookahead: Beliebig viele Wortzeichen gefolgt von einem Kleinbuchstaben
- Lookahead: Beliebig viele Wortzeichen gefolgt von einem Großbuchstaben
- Beliebig viele Wortzeichen
- Stringende
Nach meinem Verständnis hätte man das doch auf "[2]{8,}$" verkürzen können, oder übersehe ich etwas?
Lass mich raten: Hier wird ein Passwort auf seine Stärke geprüft, und die Anforderungen waren:
- Mindestens acht Zeichen,
- mindestens ein Kleinbuchstabe,
- mindestens ein Großbuchstabe,
- mindestens eine Ziffer.
Das drückt obige RegExp auch korrekt aus, soweit ich das sehe, wenn auch ziemlich umständlich.
Ich würde hier
- Auf die Länge prüfen >= 8 &&
- Auf die RegExp [a-z] prüfen &&
- Auf die RegExp [A-Z] prüfen &&
- Auf die RegExp \d prüfen
Besser wäre eine Bibliothek, die die Passwortstärke sinnvoll berechnet und die nicht nur ASCII zulässt, sondern auch ein »ä« als Kleinbuchstaben anerkennt.
Mathias