molily: Was bedeutet diese Regex?

Beitrag lesen

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


  1. A-Za-z0-9 ↩︎

  2. A-Za-z0-9 ↩︎