2009-08-10 14 views
0

Bitte geben Sie mir einen regulären Ausdruck für das Passwort mit den folgenden Regeln.regulären Ausdruck für Passwort

Das Passwort sollte mindestens 7 Zeichen lang sein. Es sollte mindestens 3 Ziffern und ein alphabetisches Zeichen enthalten. Passwort kann Zahlen, Alphabete, Sonderzeichen beliebig oft annehmen, mit Ausnahme von Zahlen. 3.

+2

Warum sollte ich mich kümmern? Sie sollten zumindest so tun, als würden Sie sich Mühe geben, selbst einen zu schreiben! –

+0

Ich denke, die Leute fragen ohne ausprobieren ist, warum es abgelehnt ... eine gute Google-Suche gibt leicht ein paar Vorschläge zurück. – BigBlondeViking

+0

^\ * {4,8} $ ... es ist ein Witz –

Antwort

4

Dies ist besser für eine Validierungsfunktion geeignet, die Ihre individuellen Kriterien einzeln überprüft als eine zu komplizierte Regex.

Wenn Sie eine Regex verwenden, werfen Sie einen Blick auf this almost identical question ... aber lesen Sie die höchste Wahl, nicht nur die angenommene Antwort.

2

Reguläre Ausdrücke, während elegant, wenn richtig gemacht, sind nicht für alle Zwecke geeignet. Ich würde vorschlagen, dass dies einer der Fälle ist, für die es nicht geeignet ist.

Verstehen Sie mich nicht falsch, Sie können es mit einem einzigen RE tun, aber es ist wahrscheinlich viel komplexer und schwer zu pflegen als einige einfache Verfahren, die die Länge und Zeichenklassen überprüft.

8

Reguläre Ausdrücke sind nicht besonders gut, um sicherzustellen, dass bestimmte Gruppen von Zeichen eine bestimmte Anzahl von Malen angezeigt werden. Obwohl es wahrscheinlich möglich ist - es wäre zweifellos verworren und nicht offensichtlich.

Wenn Sie in .NET (C# oder VB) Programmierung können Sie eine einfache Validierungsfunktion so etwas wie verwenden:

bool ValidatePasswordCompliance(string password) 
{ 
    int countDigits = 0; 
    int countAlpha = 0; 
    int countOthers = 0; 
    foreach(char c in password) 
    { 
     countDigit += c.IsDigit ? 1 : 0; 
     countAlpha += c.IsAlpha ? 1 : 0; 
     countOther += !(c.IsAlpha || c.IsDigit) ? 1 : 0; 
    } 
    return countDigits >= 3 && (countDigits + countAlpha + countOthers) >= 7; 
} 

Wenn Sie die Arbeit mit .NET 3.5 oder höher, können Sie LINQ um dies zu vereinfachen:

bool ValidatePasswordCompliance(string password) 
{ 
    return password.Count() >= 7 && 
      password.Count(x => x.IsDigit) >= 3; 
} 
+0

Abstimmung, da es Beispielcode gibt. – paxdiablo

+0

Ich würde anmerken, dass eine echte Passwort-Gültigkeitsüberprüfungsfunktion möglicherweise nach reservierten Zeichen suchen möchte, die als Passwort-Zeichen nicht gültig sind - insbesondere wenn sie in einer mehrsprachigen Umgebung wie dem Internet arbeiten sollen. – LBushkin

+1

Regex kann herausfordernd und lohnend sein, wenn du ein Handwerk machst, das gut funktioniert, aber nicht immer die Antwort. Up stimmen für Pragmatismus. – QueueHammer