2016-12-09 2 views
0

Ich versuche, ein Passwort mit den folgenden Regeln zu überprüfen:Validierung Passwort mit regulären Ausdrücken

  • muss mindestens acht Zeichen lang sein.
  • Darf nur Buchstaben und Ziffern enthalten.
  • Muss mindestens zwei Ziffern enthalten.

Bisher habe ich diesen Code:

[0-9a-zA-Z] (?=(.*\d){2}) {8,} 

Ich bin nicht sicher, warum die Passwörter ich Rückkehr eingeben ungültig, obwohl es die Regeln folgt.

+1

... haben Sie eine Frage? – jonrsharpe

+0

Alle nicht alphanumerischen Zeichen zu ignorieren scheint mir eine schlechte Idee zu sein. –

Antwort

1

Denken Sie daran, dass Leerzeichen in einem Regex-Muster sinnvoll sind, sodass Sie am Ende mindestens 8 Leerzeichen benötigen. Es gibt keine Anker in der Regex, daher funktioniert die Längenbeschränkung möglicherweise nicht, selbst wenn Sie ein korrektes Muster schreiben. Bisher entspricht dies einem alphanumerischen Zeichen, einem Leerzeichen gefolgt von 2 Vorkommen von 0+ Zeichen gefolgt von einer Ziffer. Da jedoch ein Leerzeichen mit {8,} Quantifizierer vorhanden ist, wird dieses Muster niemals mit irgendetwas übereinstimmen.

Sie benötigen

^(?=.{8})[a-zA-Z]*(?:\d[a-zA-Z]*){2}[a-zA-Z0-9]*$ 

Siehe regex demo

  • ^ - Beginn der Zeichenfolge
  • (?=.{8}) - mindestens 8 Zeichen
  • [a-zA-Z]* - null oder mehr Buchstaben
  • (?:\d[a-zA-Z]*){2} - 2 Sequenzen von :
    • \d - null oder mehr Buchstaben
  • [a-zA-Z0-9]* - - 0+ alphanumerisches Zeichen
  • $ - Ende der Zeichenkette eine Ziffer
  • [a-zA-Z]* (mit [0-9] ersetzt werden).

Alternativ können Sie

^(?=(?:[a-zA-Z]*\d){2})[a-zA-Z0-9]{8,}$ 

Siehe another regex demo

Hier verwenden, (?=(?:[a-zA-Z]*\d){2}) mindestens zwei Vorkommen von 0+ Buchstaben folgen mit einer Ziffer im String benötigen und [a-zA-Z0-9]{8,} wird 8 entsprechen oder mehr alphanumerische Zeichen.

Verwandte Themen