Regulärer Ausdruck für starkes Passwort im MVC-Modell
Brauche ich zum erstellen eines regulären Ausdrucks zu validieren eines sicheren Kennworts in meiner MVC-Modell. Hier sind die Regeln, die ich anwenden müssen:
- Min 7 Zeichen
- Max 15 Zeichen
- Mindestens 3 von 4 verschiedenen Arten von Zeichen.
- Zahlen
- Kleinbuchstaben
- Großbuchstaben
- Speziellen (vgl.
!@#$%&/=?_.
)
Hier ist, was ich bisher versucht habe:
[DataType(DataType.Password)]
[RegularExpression("([a-z]|[A-Z]|[0-9]|[\\W]){4}[a-zA-Z0-9\\W]{3,11}", ErrorMessage = "Invalid password format")]
public string Password { get; set; }
- Zeigen Sie, was Sie versucht haben, und erklären Sie, was nicht funktioniert
- Sorry, neu hier 🙂 Hinzugefügt.
- Schlagen Sie Ihren Blick auf einige der Beispiele hier
- Danke , werde schauen
- Was sind die besonderen Charaktere? Einen bestimmten Satz oder jedes beliebige UNICODE-Zeichen nicht die Zugehörigkeit zu einer der anderen Gruppen?
- Sonderzeichen : !@#$%&/=?_.-
- Max 15 ist eine schlechte Idee. Es ist zu kurz für Leute, die wollen, verwenden Sie sichere zufällige Passwörter von Passwort-Managern. Gehen für max 72 mindestens
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen eines regex finden Sie jede Anzahl von verschiedenen Arten von Charakter-Klassen in beliebiger Reihenfolge ist ein wenig schwierig, denn sobald man Spiel einen Charakter, es ist bereits erfasst und Sie können nicht sichern Sie Sie. Jedoch, die .NET-regex-engine unterstützt lookahead-Ausdrücke. Daher können Sie überprüfen, um sicherzustellen, dass eine Zeichenfolge enthält etwas, ohne tatsächlich zu erfassen jeder der Zeichenfolge. Zum Beispiel, sagen wir, Sie möchten eine 10 Zeichen lange Zeichenfolge, die enthält mindestens eine Instanz des Buchstaben "J". Sie können das leicht mit einem lookahead Ausdruck, wie diese:
Den
(?=)
Konstrukt deklariert eine lookahead-Muster. Das Muster sieht es für ist.*J
, was bedeutet, dass, ausgehend von der aktuellen position, kann es eine beliebige Anzahl von beliebigen Zeichen, gefolgt vom Buchstaben "J". Und wenn was kommt nach dem J, das ist in Ordnung, es wird immer noch passen. Jedoch, da es ein lookahead, keines dieser Zeichen waren tatsächlich gefangen, so dass dann die.{10}
Erfassung Teil des Musters nimmt die ursprüngliche position und passt von dort. Da die lookaheads nicht verschieben, die position an, können Sie mehrere von Ihnen in Folge ohne Folge, so können Sie etwas wie das hier tun:Als weit als die Anwendung von nur drei der vier Charakter-Klasse-Regeln, die nur so kann ich mir vorstellen, das zu tun wäre, um eine Liste der Kombinationen (z.B. für zwei der drei Regeln A, B, und C, Sie könnte passen AB|AC|BC) . So zum Beispiel, wenn Sie wurden nur mit zwei der drei (Großbuchstaben, Kleinbuchstaben und Ziffern, zum Beispiel), könnten Sie die Struktur Ihrer lookaheads wie diese:
So dass es Unterstützung gibt es aus vier wäre nur eine Frage der Sicherstellung der Optionen-Liste noch länger...
^(?=[^A-Z]*[A-Z])(?=\D*\d)(?=[^a-z]*[a-z])(?=\w*\W).{7,15}$
Einer Entwicklung von-Stephan-Antwort wäre zum testen für alle möglichen Kombinationen der Arten:
Auch mit der gegebenen Sonderzeichen.
In einer besser lesbaren form
Test für die möglichen vier Kombinationen von Arten und stellen Sie sicher, es gibt 7-14 von Ihnen.
Hinsichtlich