Heim > Artikel > Web-Frontend > Zwei reguläre JS-Ausdrucksmethoden zur Implementierung der Passwortstärke
In diesem Artikel werden zwei reguläre Ausdrucksschemata für die Passwortstärke vorgestellt, eines ist einfach und das andere ist komplexer und sicherer. Außerdem werden die Analyse- und Testverfahren der beiden Lösungen angegeben. Im Allgemeinen können Sie Ihre eigenen regulären Passwortkonventionen basierend auf den tatsächlichen Anforderungen Ihres Projekts definieren.
Vorwort
Bei der Benutzerregistrierung wird die Überprüfung der Passwortregelmäßigkeit verwendet. Um korrekte reguläre Ausdrücke zu schreiben, müssen Sie zunächst Ausdrucksregeln definieren.
Option 1 (einfach)
Angenommen, die Passwortüberprüfung ist wie folgt definiert:
Kürzeste 6 Ziffern, bis zu 16 Ziffern {6,16}
kann Kleinbuchstaben [a-z] und Großbuchstaben [A-Z] enthalten
Kann Zahlen [0-9] enthalten
Kann Unterstriche [_] und Minuszeichen [-] enthalten
Gemäß den oben genannten Regeln, Es ist einfach. Die Definition regulärer Literale lautet wie folgt:
var pattern = /^[\w_-]{6,16}$/;
Analyse von Schema 1
Literal / /
Ein reguläres Ausdrucksliteral ist definiert als die Zeichen, die zwischen einem Schrägstrichpaar (/) enthalten sind, zum Beispiel:
var pattern = /s$/;
Oben Das Literal entspricht jeder Zeichenfolge, die mit dem Buchstaben „s“ endet.
Zeichenklasse [ ]
Setzen Sie Zeichen in eckige Klammern, um eine Zeichenklasse zu bilden. Eine Zeichenklasse kann mit jedem darin enthaltenen Zeichen übereinstimmen. Daher entspricht der reguläre Ausdruck /[abc]/ jedem der Buchstaben „a“, „b“ oder „c“.
Zeichenklassen können Bindestriche verwenden, um Zeichenbereiche darzustellen. Um lateinische Kleinbuchstaben zuzuordnen, verwenden Sie /[a-z]/ .
Zeichenklasse w
Die Zeichenklasse w entspricht jedem Wort, das aus ASCII-Zeichen besteht, äquivalent zu [a-zA-Z0-9].
[w_-] bedeutet die Übereinstimmung aller lateinischen Groß- und Kleinbuchstaben, Zahlen sowie Unterstriche und Minuszeichen.
Wiederholen {}
Verwenden Sie { } in regulären Ausdrücken, um die Anzahl der Wiederholungen eines Elements darzustellen.
{n,m} entspricht dem vorherigen Element mindestens n-mal, jedoch nicht mehr als m-mal.
{n,} entspricht dem vorheriges Element n-mal oder öfter
{n} stimmt n-mal mit dem vorherigen Element überein
[w_-]{6,16} bedeutet, dass alle lateinischen Groß- und Kleinbuchstaben, Zahlen sowie Unterstriche und Minuszeichen mindestens 6 Mal und höchstens 16 Mal vorkommen.
Passen Sie die Position an
^ Passen Sie den Anfang der Zeichenfolge an, bei der mehrzeiligen Abfrage den Anfang einer Zeile.
$ Passen Sie das Ende der Zeichenfolge an , in mehreren Zeilen. Passen Sie beim Abrufen das Ende einer Zeile
/^w/ an und suchen Sie nach Zeichenfolgen, die mit Groß- und Kleinbuchstaben oder Zahlen beginnen.
Szenario 1-Test
Die Testergebnisse lauten wie folgt:
var pattern = /^[\w_-]{6,16}$/; pattern.test('123456') = true; pattern.test('-ifat33') = true; pattern.test('42du') = false; pattern.test('du42du42du42du421') = false; pattern.test('42du42@') = false;
Quellcode ansehen
Anhand der Testergebnisse lässt sich erkennen, dass Lösung 1 das Passwort nur kurzzeitig einschränkt und die Stärke des Passworts sowie die Sicherheit des Kontos nicht garantieren kann.
Option 2 (Sicherheit)
Angenommen, die Passwortüberprüfung ist wie folgt definiert:
Kürzeste 6 Ziffern, bis zu 16 Ziffern {6,16}
muss 1 Zahl enthalten
muss 2 Kleinbuchstaben enthalten
muss 2 Großbuchstaben enthalten
muss 1 Sonderzeichen enthalten
gemäß den oben genannten Regeln , ist es einfach, die Definition regulärer Literale wie folgt anzugeben:
var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/;
Szenario 2-Analyse
Zeichenklasse.
Zeichenklasse Repräsentiert jedes Zeichen außer Zeilenumbrüchen und anderen Unicode-Zeilenabschlusszeichen.
Forward-Lookahead-Behauptung (?= )
Fügen Sie einen Ausdruck zwischen den Symbolen „(?=" und „)“ hinzu. Es handelt sich um eine Lookahead-Behauptung. Wird zur Angabe verwendet dass Ausdrücke in Klammern korrekt übereinstimmen müssen. Beispiel: /Java(?=:)/ kann nur mit Java übereinstimmen und wird von einem Doppelpunkt gefolgt.
(?=.*[!@#$%^&*?()])
Diese Lookahead-Behauptung gibt an, dass ein Sonderzeichen enthalten sein muss. Die 10 Sonderzeichen im obigen Ausdruck sind die oberen Umschalttastenzeichen der Tastatur 1, 2 ... 0, und es können auch andere Sonderzeichen hinzugefügt werden. Hinweis: Wenn das hinzugefügte Zeichen im regulären Ausdruck eine besondere Bedeutung hat, müssen Sie es mit einem Backslash () vor dem Symbol maskieren.
Option 2-Test
Die Testergebnisse lauten wie folgt:
var pattern = /^.*(?=.{6,16})(?=.*\d)(?=.*[A-Z]{2,})(?=.*[a-z]{2,})(?=.*[!@#$%^&*?\(\)]).*$/; pattern.test('du42DU!') = true; pattern.test('duDUd!') = false; pattern.test('42dud!') = false; pattern.test('42DUD!') = false; pattern.test('42duDU') = false; pattern.test('42duU(') = false; pattern.test('42dUU!') = false;
Verwandte Empfehlungen:
Detaillierte Erläuterung nativer JS-Objekte und regulärer Ausdrücke
Tipps für reguläre JavaScript-Ausdrücke
Zusammenfassung der regulären PHP-Ausdrücke
Das obige ist der detaillierte Inhalt vonZwei reguläre JS-Ausdrucksmethoden zur Implementierung der Passwortstärke. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!