2016-06-16 17 views
0

Ich verwende einen Standard-Regex-Ausdruck als Passwort-Überprüfung, die, soweit ich sehen kann, Non-Word-Zeichen (\ W) am Anfang von akzeptieren der Ausdruck, aber nicht. Die Regex erfordert mindestens 8 Zeichen und eine Kombination aus mindestens 1 unteren, 1 oberen, 1 Zahl und 1 Nichtwortzeichen.Regex: Non-Word am Anfang eines Ausdrucks nicht erkannt

Weiß jemand, was ich falsch mache?

\b(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*[\W])\b.* 

z.

T3st1ng! 

identifiziert

!T3sting 

nicht.

+2

Ich denke, Sie brauchen '^ (? =. * [Az]) (? =. * [AZ]) (? =. * \ D) (? =. * \ W). {8,} $' –

+0

Danke @ WiktorStribiżew und kzrw. Es war eine dieser Fragen, die ich ausgearbeitet hatte, sobald ich das gepostet hatte, aber beide Vorschläge sind sauberer und sauberer. – Matthew

+0

Arbeiten Sie in Java? Bitte denken Sie daran, die Antwort zu akzeptieren, die am besten zu Ihnen passt. –

Antwort

0

Wortgrenze \b ist ein virtuelles Leerzeichen zwischen Nicht-Wort-Zeichen und Wort-Zeichen. Wortzeichen sind alle alphanumerische Zeichen. ! ist ein Nicht-Wort-Zeichen, also funktioniert Ihr! T3sting nicht.

Und das brauchen Sie nicht, wenn Sie nur nach einem Passwort suchen.

richtige ist:

(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).* 
2

Sie benötigen

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{8,}$ 

Siehe regex demo

Statt \b Sie ^ und $ Anker verwenden müssen. Außerdem müssen Sie die Lookahead-Längenprüfung nicht einstellen, sie kann am Ende auf den .-Teil verschoben werden. Es ist auch nicht erforderlich, in einer Zeichenklasse eine einzelne Kurzschreibeklasse zu verwenden. Ersetzen Sie [\d] durch \d, um einen saubereren Ausdruck zu erhalten.

Verwandte Themen