Ich möchte, dass ein regulärer Ausdruck dies überprüft
Ein Passwort muss aus acht Zeichen bestehen, einschließlich eines Großbuchstabens, eines Sonderzeichens und alphanumerischer Zeichen.
Und hier ist mein Validierungsausdruck für acht Zeichen, einschließlich eines Großbuchstaben, eines Kleinbuchstaben und einer Zahl oder eines Sonderzeichens.
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
Wie kann ich es für ein Passwort schreiben, das aus acht Zeichen bestehen muss, einschließlich eines Großbuchstabens, eines Sonderzeichens und alphanumerischer Zeichen?
Antworten:
Der reguläre Ausdruck, nach dem Sie suchen, wird höchstwahrscheinlich riesig und ein Albtraum sein, den Sie besonders für Menschen pflegen müssen, die mit regulären Ausdrücken nicht so vertraut sind.
Ich denke, es wäre einfacher, Ihre Regex zu zerlegen und es Stück für Stück zu tun. Es könnte etwas länger dauern, aber ich bin mir ziemlich sicher, dass es einfacher wäre, es zu warten und zu debuggen. Auf diese Weise können Sie Ihren Benutzern (außer nur
Invalid Password
) gezieltere Fehlermeldungen zur Verfügung stellen, die die Benutzererfahrung verbessern sollen.Nach dem, was ich sehe, sprechen Sie Regex ziemlich fließend, daher würde ich davon ausgehen, dass es sinnlos wäre, Ihnen die regulären Ausdrücke zu geben, um das zu tun, was Sie brauchen.
Wenn ich Ihren Kommentar sehe, würde ich so vorgehen:
Muss acht Zeichen lang sein: Sie benötigen dafür keinen regulären Ausdruck. Die Nutzung der
.Length
Eigenschaft sollte ausreichen.Einschließlich eines Großbuchstabens: Sie können den
[A-Z]+
regulären Ausdruck verwenden. Wenn die Zeichenfolge mindestens einen Großbuchstaben enthält, ergibt dieser reguläre Ausdrucktrue
.Ein Sonderzeichen: Sie können entweder das
\W
Zeichen verwenden, das mit jedem Zeichen übereinstimmt, das kein Buchstabe oder eine Zahl ist, oder Sie können so etwas verwenden[!@#]
, um eine benutzerdefinierte Liste von Sonderzeichen anzugeben. Beachten Sie aber , dass Charaktere wie$
,^
,(
und)
sind Sonderzeichen in der regulären Ausdruckssprache, so dass sie wie so entkommen sein müssen:\$
. Kurz gesagt, Sie könnten das verwenden\W
.Alphanumerische Zeichen: Die Verwendung von
\w+
sollte mit jedem Buchstaben, jeder Zahl und jedem Unterstrich übereinstimmen.Weitere Informationen finden Sie in diesem Tutorial.
quelle
In einer Zeile:
Bearbeiten 2019-05-28:
Sie müssen die gesamte Eingabezeichenfolge abgleichen. Sie können also den regulären Ausdruck zwischen
^
und einschließen$
, um zu verhindern, dass versehentlich Teilübereinstimmungen als Übereinstimmung mit der gesamten Eingabe angenommen werden:Quellen:
Passwort passender Ausdruck
Überprüfung der Kennwortstärke mit regulären Ausdrücken
quelle
^
und einfügen$
. Versuchen Sie dies:^((?=.*\d)(?=.*[A-Z])(?=.*\W).{8,8})$
So viele Antworten ... alles schlecht!
Reguläre Ausdrücke haben keinen UND-Operator, daher ist es ziemlich schwierig, einen regulären Ausdruck zu schreiben, der gültigen Passwörtern entspricht, wenn die Gültigkeit durch etwas UND etwas anderes UND etwas anderes definiert wird ...
Reguläre Ausdrücke haben jedoch einen ODER-Operator. Wenden Sie daher einfach den Satz von DeMorgan an und schreiben Sie einen regulären Ausdruck , der mit ungültigen Kennwörtern übereinstimmt .
alles mit weniger als 8 Zeichen ODER alles ohne Zahlen ODER alles ohne Großbuchstaben ODER alles ohne Sonderzeichen
So:
Wenn etwas dazu passt, ist es ein ungültiges Passwort.
quelle
|.{9,}
. +1 für das KonzeptDie Antwort ist, keinen regulären Ausdruck zu verwenden. Dies ist Sätze und Zählen.
Bei regulären Ausdrücken geht es um Ordnung.
In Ihrem Leben als Programmierer werden Sie gebeten, viele Dinge zu tun, die keinen Sinn ergeben. Lerne ein Level tiefer zu graben. Erfahren Sie, wenn die Frage falsch ist.
Die Frage (wenn es um reguläre Ausdrücke geht) ist falsch.
Pseudocode (hat in letzter Zeit zwischen zu vielen Sprachen gewechselt):
Ich wette, Sie haben den obigen Code fast sofort gelesen und verstanden. Ich wette, Sie haben mit dem regulären Ausdruck viel länger gebraucht und sind sich weniger sicher, ob er korrekt ist. Die Erweiterung des regulären Ausdrucks ist riskant. Erweitert das Unmittelbare oben, geschweige denn.
Beachten Sie auch, dass die Frage ungenau formuliert ist. Ist der Zeichensatz ASCII oder Unicode oder ?? Meine Vermutung beim Lesen der Frage ist, dass mindestens ein Kleinbuchstabe angenommen wird. Daher denke ich, dass die angenommene letzte Regel lauten sollte:
(Wenn Sie die Hüte auf sicherheitsorientiert ändern, ist dies eine wirklich ärgerliche / nicht nützliche Regel.)
Zu wissen, wann die Frage falsch ist, ist massiv wichtiger als kluge Antworten. Eine kluge Antwort auf die falsche Frage ist fast immer falsch.
quelle
Als Beispiel, wie dies mit einem lesbaren / wartbaren regulären Ausdruck geschehen könnte.
Für eine längere Regex sollten Sie immer
RegexOptions.IgnorePatternWhitespace
Leerzeichen und Kommentare im Ausdruck zulassen, um die Lesbarkeit zu verbessern.quelle
lookahead assertion
Muster als "und" zu missbrauchen , um die gesamte Einschränkung innerhalb eines einzelnen regulären Ausdrucks abzudecken. Funktioniert für mehr Einschränkungen und kann leicht generiert werden, wenn einige Einschränkungen durch Konfiguration aktiviert / deaktiviert werden sollen.Wenn Sie nur einen Großbuchstaben und ein Sonderzeichen benötigen, sollte dies funktionieren:
quelle
AAaaaaaaa#
ist nach diesem Ausdruck nicht in OrdnungDer reguläre Ausdruck, nach dem Sie gesucht haben, lautet:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\$%\^&\*\[\]"\';:_\-<>\., =\+\/\\]).{8,}$/u
.Beispiel und Test: http://regexr.com/3fhr4
quelle
.
vor dem{8,}
zu[^\s]
.Diese Frage beginnt viral zu werden und es erschienen viele interessante Vorschläge.
Ja, das Schreiben von Hand ist schwierig. Eine einfachere Lösung ist die Verwendung einer Vorlage. Obwohl der resultierende reguläre Ausdruck möglicherweise nicht optimal ist, ist er einfacher zu warten und / oder zu ändern, und der Benutzer hat eine bessere Kontrolle über das Ergebnis. Es ist möglich, dass ich etwas verpasst habe, daher ist jede konstruktive Kritik hilfreich.
Diese Links könnten interessant sein: Ordnen Sie mindestens 2 Ziffern und 2 Buchstaben in beliebiger Reihenfolge in einer Zeichenfolge zu , Sprache für reguläre Ausdrücke , Erfassungsgruppen
Ich verwende diese Vorlage
(?=(?:.*?({type})){({count})})
basierend auf dem gesamten regulären Ausdruck, den ich in SO gesehen habe. Der nächste Schritt ist das Ersetzen des erforderlichen Musters (number
,special character
...) und das Hinzufügen einer Konfiguration für die Länge.Ich habe eine kleine Klasse zum Erstellen des regulären Ausdrucks PasswordRegexGenerator.cs erstellt. Ein Beispiel:
quelle
Sie können die folgende Klasse zur Validierung verwenden:
Dabei sind 6 und 20 die minimale und maximale Länge für das Passwort.
quelle
(?>{8,})
(?<=...)
(?<=\p{Lu}.*)
(?<=\W.*)
(?<=\w.*)
Zusammenfassend:
(?>.{8,})(?<=\p{Lu}.*)(?<=\W.*)(?<=\w.*)
quelle
Am besten ist es, nicht für alles Regex zu verwenden. Diese Anforderungen sind sehr gering. Bei CPU-bezogenen Zeichenfolgen sind Operationen zur Überprüfung der Kriterien / Validierung viel billiger und schneller als Regex!
quelle
quelle