2016-07-20 21 views
0

Das Muster sollte übereinstimmen, wenn mindestens 1 numerisches ODER 1 Sonderzeichen UND eine Gesamtlänge von 8 oder mehr vorhanden ist.Regex optional und Gruppe

Es funktioniert teilweise, aber nur wenn das Sonderzeichen oder numerische Werte am Anfang sind.

Bisher habe ich:

/([\d]|[[email protected]#$%^&*()_+])([a-z]).{8,}/ 
+1

Nur damit Sie wissen, '[Az]' enthält auch die Zeichen '' [\]^'_'' –

+0

Guter Punkt, danke wird es auf az fallen lassen. – Adrian

+0

Mögliches Duplikat von [Regex für Passwort Muss mindestens 8 Zeichen enthalten, mindestens 1 Zahl sowie Groß- und Kleinbuchstaben und Sonderzeichen] (http://stackoverflow.com/questions/19605150/regex-for-password-must-) be-contain-mindestens-8-Zeichen-mindestens-1-Nummer-und-bot) –

Antwort

3

Warum ein RegExp verkomplizieren? Sicher ist es möglich, aber Sie müssen jede Permutation von möglichen Kombinationen von Zeichen angeben, die diesen Anforderungen entsprechen. Genau dies tun:

if (/[\[email protected]#$%^&*()_+]/.test(string) && string.length >= 8) { ... } 
+0

Die Regex kann auch nur sein: '/ [\ d! @ # $%^& *() _ +] /' – rgthree

+0

Oh wahr, ich werde das beheben. Ich habe nur seine Regexp kopiert –

0

Sie es rückwärts zu tun, versuchen Sie nicht positiv Sonderzeichen entsprechen, begrenzt das, was Menschen können/verwenden. Stattdessen betrachten Sie Match etwas nicht nicht etwas Besonderes zu sein, zum Beispiel:

pw.length >= 8 && /\d/.test(pw) && /[^a-z\d\x20]/i.test(pw) 

als Kontrollen Länge, das Vorhandensein einer Ziffer, dann Vorhandensein eines Zeichens, das nicht alphanumerische noch ein Raum ist (die i Flagge es Fall macht -unempfindlich). Sie sollten auch Räume und andere Steuerzeichen nicht zulassen, die nicht in der Regel der Lage sind, auf einer Tastatur eingegeben werden (verhindert Menschen in Junk-Einfügen):

&& !/[\x00-\x20]/.test(pw)