2016-04-23 4 views
1

Ich versuche zu überprüfen (in ASP.net MVC), wenn das eingegebene Passwort enthält "Großbuchstaben, Kleinbuchstaben und Zahlen." Der reguläre Ausdruck ist in Ordnung, funktioniert aber nicht (Bitte geben Sie ein gültiges Passwort ein). Wenn ich einen einfachen Ausdruck eingeben @ "^ d + $", wenn es funktioniert. Was ist das Falsche? Danke!RegularExpression Daten Annotation

private const string Pattern = @"^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])$"; 

[DataType(DataType.Password)] 
[DisplayName("Password:")] 
[Required(ErrorMessage = "Please enter your password.")] 
[RegularExpression(Pattern, ErrorMessage = "Please enter a valid password")] 
public string Password { get; set; } 

Antwort

2

Die RegexMuster entspricht nicht eine beliebige Zeichenfolge, weil es eine Zeichenfolge erfordert eine Groß- und Kleinbuchstaben und eine Ziffer zu haben, aber hat kein raubend Unter-Pattern. Um Strings beliebiger Länge zu entsprechen, verwenden

@"^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$" 
            ^^ 

Oder - passen nur eine nicht leere Zeichenfolge

@"^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).+$" 
            ^^ 

Die .* Matches alle 0+ andere Zeichen als eine neue Zeile, und .+ Matches 1+ Zeichen anders als ein Newline.

Wenn Sie die Zeichenfolge wollen nur aus Groß- und Kleinbuchstaben und/oder Ziffern, verwenden Sie die [a-zA-Z0-9] Zeichenklasse:

@"^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]*$" 
            ^^^^^^^^^^^^ 

die quantifier einstellen je nach Bedarf.

+0

Diese Unicode nicht unterstützt. –

+0

@PoulBak: Sollte es? Einfach - '@"^(? =. * \ P {Lu}) (? =. * \ P {Ll}) (? =. * \ D). * $ "' Oder noch besser: '@" \ A (? =. * \ p {Lu}) (? =. * \ p {Ll}) (? =. * \ d). * \ z "' –

+0

Ich weiß nicht, ich mag wann immer möglich Unicode. –

0

Versuch dieses [RegulaererAusdruck (@ "^ (? =. \ d) (? =. [az]) (? =. * [AZ]) $")] verwenden

die Ziffer sein soll (? =. \ d) nicht (? =. [0-9])

Glück

Verwandte Themen