2012-08-16 17 views
13

ich auf einer Rails 3 Anwendung arbeite, die das Passwort auf Grundlage der folgenden Kriterien validieren muss: must be at least 6 characters and include one number and one letter.Passwort Regex mit Validieren

Hier ist mein Regex:

validates :password, :format => {:with => /^[([a-z]|[A-Z])0-9_-]{6,40}$/, message: "must be at least 6 characters and include one number and one letter."} 

Gerade jetzt, wenn ich setzte in ein Passwort von (zB: Dogfood) wird übergeben. Aber ich muss die oben genannten Kriterien erfüllen.

Ich bin nicht so gut in Regex, so jede und alle Hilfe wird sehr geschätzt!

Antwort

27

Verwenden Look-Ahead-Behauptungen:

/^(?=.*[a-zA-Z])(?=.*[0-9]).{6,}$/ 
    |    |   | 
    |    |   | 
    |    |   Ensure there are at least 6 characters. 
    |    | 
    |    Look ahead for an arbitrary string followed by a number. 
    |       
    Look ahead for an arbitrary string followed by a letter. 

Technisch in diesem Fall brauchen Sie nicht die Anker, aber es ist eine gute Gewohnheit, sie zu benutzen.

+0

wow, das funktioniert perfekt! vielen Dank! Kannst du etwas über Lookahead Assertions erklären? – dennismonsewicz

+3

Lookaheads freuen sich auf ein Muster, hier sieht es von Anfang an für alles an (.) 0 oder mehr Male gefolgt von [a-zA-Z] und gleiches mit [0-9]. Lookaheads geht nicht vorwärts, so dass du immer noch auf Position 0 bist, wenn es darum geht. {0,6} was die Länge von 6+ bestätigt. – netigger

+0

Siehe bearbeitete Antwort für Erklärung. Aber @ DavidEverlöf danke für eine ausführlichere Erklärung. –