888 Stimmen

Der Regex für das Passwort muss mindestens acht Zeichen enthalten, mindestens eine Zahl sowie sowohl Klein- als auch Großbuchstaben und Sonderzeichen.

Ich möchte einen regulären Ausdruck verwenden, um das folgende zu überprüfen:

Ein Passwort muss mindestens acht Zeichen lang sein, mindestens eine Zahl enthalten und sowohl Klein- als auch Großbuchstaben sowie Sonderzeichen wie #, ?, ! enthalten.

Es darf nicht Ihr altes Passwort enthalten oder Ihren Benutzernamen, "password" oder "websitename".

Und hier ist mein Validierungsausdruck, der für acht Zeichen einschließlich einem Großbuchstaben, einem Kleinbuchstaben und einer Zahl oder einem Sonderzeichen gilt.

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Wie kann ich es für ein Passwort muss acht Zeichen lang sein, einschließlich eines Großbuchstabens, eines Sonderzeichens und alphanumerischer Zeichen schreiben?

10voto

Milan Paudyal Punkte 451
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*()_+,.\\\/;':"-]).{8,}$

8voto

The fourth bird Punkte 135850

Eine weitere Option besteht darin, den Kontrast in den Lookahead-Assertionen unter Verwendung einer negierten Zeichenklasse zu nutzen, die optional jedes Zeichen vor dem übereinstimmenden Zeichen auflistet, das übereinstimmen sollte.

^(?=[^A-Z\n]*[A-Z])(?=[^a-z\n]*[a-z])(?=[^0-9\n]*[0-9])(?=[^#?!@$%^&*\n-]*[#?!@$%^&*-]).{8,}$

Siehe eine Regex-Demo

Der Musterabgleich erfolgt in Teilen wie folgt:

  • ^ Anfang des Strings
  • (?=[^A-Z\n]*[A-Z]) Positiver Lookahead, stellt sicher, dass kein A-Z-Zeichen oder ein Zeilenumbruch 0+ mal übereinstimmt. Dann übereinstimmend mit einem Zeichen A-Z
  • (?=[^a-z\n]*[a-z]) Der gleiche Ansatz für ein Zeichen a-z
  • (?=[^0-9\n]*[0-9]) Der gleiche Ansatz für eine Ziffer 0-9
  • (?=[^#?!@$%^&*\n-]*[#?!@$%^&*-]) Der gleiche Ansatz für ein Zeichen, das als speziell betrachtet wird
  • .{8,} Übereinstimmung mit 8 oder mehr Zeichen außer einem Zeilenumbruch
  • $ Ende des Strings

Anmerkungen

  • Ein Punkt kann auch ein Leerzeichen übereinstimmen. Wenn Sie keine Übereinstimmung mit einem Leerzeichen zulassen möchten, kann .{8,} in \S{8,}
  • Wenn entweder . oder \S.{8,} ändern, um nur die erlaubten Zeichen [#?!@$%^&*A-Za-z0-9-]{8,} mit einer Zeichenklasse zu entsprechen

    const regex = /^(?=[^A-Z\n][A-Z])(?=[^a-z\n][a-z])(?=[^0-9\n][0-9])(?=[^#?!@$%^&\n-][#?!@$%^&-]).{8,}$/; [ "abcA1#!A", "#!asdfSFD1;", "# a f F1 ;", "1111111111", "aaaaaaaa", "11111111", "AAAAAAAA", "########", "aA1#" ].forEach(s => console.log(regex.test(s) ? Übereinstimmung --> ${s} : Keine Übereinstimmung --> ${s}) );

5voto

Mosia Thabo Punkte 3607

Halte es einfach, du Dummerchen:

Dies sollte immer für dich funktionieren.

Regex: ^(.{0,7}|[^a-z]{1,}|[^A-Z]{1,}|[^\d]{1,}|[^\W]{1,})$|[\s]

Wenn dein Passwort dem obigen Regex entspricht, ist es ungültig.

Wenn kein Treffer vorhanden ist, ist dein Passwort gültig und enthält mindestens 8 Zeichen, einen Großbuchstaben, einen Kleinbuchstaben und ein Symbol oder Sonderzeichen. Und es enthält auch keine Leerzeichen, Tabs oder Zeilenumbrüche.

Aufschlüsselung des Regex

  1. .{0,7} - passt, wenn das Passwort zwischen 0 und 7 Zeichen hat.
  2. [^a-z]{1,} - passt, wenn kein Kleinbuchstabe gefunden wird.
  3. [^A-Z]{1,} - passt, wenn kein Großbuchstabe gefunden wird.
  4. [^\d]{1,} - passt, wenn keine Zahl (zwischen [0-9]) gefunden wird.
  5. [\s] - passt, wenn ein Leerzeichen, Tab oder Zeilenumbruch gefunden wird.

Mit diesem Ansatz gibt es keine Begrenzung oder Einschränkung in Bezug auf erlaubte Symbole. Wenn du die erlaubten Symbole einschränken möchtest, ändere einfach [^\W] in [^DeineSymbole].

5voto

Hasan Tezcan Punkte 894
/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/

Das ist der einfache Weg, es zu verwenden, um mindestens 1 Großbuchstabe, 1 Kleinbuchstabe und 1 Zahl zu validieren

und dies ist das Beispiel, während ich es in der Express-Validierung verwende

check('password')
    .notEmpty()
    .withMessage('Passwort darf nicht null sein')
    .bail()
    .isLength({ min: 6 })
    .withMessage('Passwort muss mindestens 6 Zeichen lang sein')
    .bail()
    .matches(/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).*$/)
    .withMessage(
      'Muss mindestens 1 Großbuchstaben, 1 Kleinbuchstaben und 1 Zahl enthalten'
    ),

4voto

MiKr13 Punkte 1031

Testen Sie dies im Jahr 2020:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

Überprüfen Sie sich selbst

const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
const str = `some12*Nuts`;
let m;

if ((m = regex.exec(str)) !== null) {
    // Das Ergebnis kann über die Variable `m` abgerufen werden.
    m.forEach((match, groupIndex) => {
        console.log(`Gefundener Treffer, Gruppe ${groupIndex}: ${match}`);
    });
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X