2017-11-08 4 views
0

Ich habe einen regex Ausdruck, um mein Passwort zu testen: mindestens eine Ziffer mindestens einen oberen Brief, mindestens eine unterer Brief und mindestens ein Sonderzeichen.Wie Unterstreichung in Regex erkennen?

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s])/ 

Aber unterstreichen nicht als special character erkannt wird.

Wie kann ich das verbessern?

+3

'[^ \ w \ s]' entspricht nicht '_'. Ersetzen Sie durch '[^ a-zA-Z0-9 \ s]' –

+0

@ WiktorStribiżew, das funktioniert. Bitte posten Sie es als Antwort. Vielen Dank! –

+3

Beachten Sie, dass das Auferlegen von Kennwortzeichen für Zeichenklassen wie diese als schlechte Praxis angesehen wird (siehe z. B. [NIST-Richtlinien für geheime Speicherverifizierer] (https://pages.nist.gov/800-63-3/sp800-63b.html#-). 5112-memorised-secret-verifiers)). –

Antwort

5

Das hier Problem ist, dass für JavaScript, \w darstellt:

[a-zA-Z0-9_] 

So _ implizit Sie vermeiden.

Explaination

Dieser Teil Ihrer regex:

(?=.*?[^\w\s]) // Match special character 

entspricht:

(?=.*?[^a-zA-Z0-9_\s]) 

Bibliographie

Die \ w metacharacter ein Wort zu finden, verwendet wird, Charakter.

Ein Wortzeichen ist ein Zeichen aus a-z, A-Z, 0-9, einschließlich des _ (Unterstrich) -Zeichens.

https://www.w3schools.com/jsref/jsref_regexp_wordchar.asp

+0

Ich meine Unterstrich ist kein Teil von 'Sonderzeichen'. –

+0

@ Alexandru-IonutMihai Das Problem ist, dass Sie '[^ \ w \ s]' machen, was äquivalent zu '[^ a-zA-Z0-9_ \ s]' ist. Die Definition von _Spezialzeichen_ ist also kein Buchstabe, keine Zahl, kein Leerzeichen und kein Unterstrich. – lilezek

Verwandte Themen