Regex für Passwort muss mindestens acht Zeichen, mindestens eine Zahl sowie Klein- und Großbuchstaben und Sonderzeichen enthalten


445

Ich möchte, dass ein regulärer Ausdruck dies überprüft:

Ein Passwort enthält mindestens acht Zeichen, darunter mindestens eine Zahl und umfasst sowohl niedrigere als auch Großbuchstaben und Sonderzeichen, zum Beispiel #, ?, !.

Es kann nicht Ihr altes Passwort sein oder Ihren Benutzernamen enthalten "password", oder"websitename"

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 schreiben, denn ein Passwort muss aus acht Zeichen bestehen, darunter ein Großbuchstabe, ein Sonderzeichen und alphanumerische Zeichen ?

Antworten:


1178

Mindestens acht Zeichen, mindestens ein Buchstabe und eine Zahl:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

Mindestens acht Zeichen, mindestens ein Buchstabe, eine Zahl und ein Sonderzeichen:

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

Mindestens acht Zeichen, mindestens ein Großbuchstabe, ein Kleinbuchstabe und eine Zahl:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

Mindestens acht Zeichen, mindestens ein Großbuchstabe, ein Kleinbuchstabe, eine Zahl und ein Sonderzeichen:

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

Mindestens acht und höchstens zehn Zeichen, mindestens ein Großbuchstabe, ein Kleinbuchstabe, eine Zahl und ein Sonderzeichen:

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

46
"^ (? =. * [A-Za-z]) (? =. * \ D) [A-Za-z \ d] {8,} $" erlaubt keine Symbole als eines der 8 Zeichen
Wee

Ich fand Folgendes für alle Zeichen zulässig (Sonderzeichen und Interpunktion), ohne sie obligatorisch zu machen: "^ (? =. * [Az]) (? =. * [AZ]) (? =. * \ D) [a- zA-Z \ d \ w \ W] {8,} $ "
Gavin

413

Sie können diesen regulären Ausdruck mit mehreren Lookahead-Zusicherungen (Bedingungen) verwenden :

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

Dieser reguläre Ausdruck erzwingt die folgenden Regeln:

  • Mindestens ein englischer Großbuchstabe ,(?=.*?[A-Z])
  • Mindestens ein englischer Kleinbuchstabe, (?=.*?[a-z])
  • Mindestens eine Ziffer, (?=.*?[0-9])
  • Mindestens ein Sonderzeichen, (?=.*?[#?!@$%^&*-])
  • Mindestens acht .{8,}(mit den Ankern)

71

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 also einfach den Satz von DeMorgan an und schreiben Sie einen regulären Ausdruck, der mit ungültigen Kennwörtern übereinstimmt:

Alles mit weniger als acht Zeichen ODER alles ohne Zahlen ODER alles ohne Großbuchstaben ODER oder alles ohne Kleinbuchstaben ODER alles ohne Sonderzeichen.

Damit:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

Wenn etwas dazu passt, ist es ein ungültiges Passwort.


3
Okay, ich hatte Angst, Sie wären einer der Informatiker, die wir manchmal bekommen und die nicht erkennen, dass es einen Unterschied zwischen regulären Ausdrücken und regulären Ausdrücken gibt . ;) Es ist wahr, dass viele Regex-Aufgaben viel einfacher sind, wenn Sie das Match-Ergebnis danach negieren können, aber das ist nicht immer möglich. Das ist allerdings eine schöne Regex. Es ist nicht einfach, es ist elegant!
Alan Moore

1
Warum habe ich noch nie darüber nachgedacht? Tolle Antwort (wenn es möglich ist, das Ergebnis zu negieren)
TeChn4K

2
Dieser erlaubt Leerzeichen, wie Sie überprüfen können, ob ein Passwort keinen Leerzeichen mit Ihrem regulären Ausdruck enthalten darf. Ich habe versucht, dies zu tun. .test ('aAa # a1a aa'); aber es funktioniert nicht
Gaurav

1
@ Gaurav, füge hinzu | [^ \ s] * \ s. *
Matt Timmermans

1
Liebe es. Damit es jedoch funktionierte, musste ich die letzte Klausel |[a-zA-Z0-9]*daraus entfernen .
17.

35

Nur eine kleine Verbesserung für die Antwort von @ anubhava: Da Sonderzeichen auf die Zeichen auf der Tastatur beschränkt sind, verwenden Sie diese für jedes Sonderzeichen:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

Dieser reguläre Ausdruck erzwingt die folgenden Regeln:

  • Mindestens ein englischer Großbuchstabe
  • Mindestens ein englischer Kleinbuchstabe
  • Mindestens eine Ziffer
  • Mindestens ein Sonderzeichen
  • Mindestens acht in der Länge

1
Entspricht in der JavaScript-Variante \Wnur ASCII-Zeichen. Sie haben das also nicht geändert, und jetzt müssen Sie Leerzeichen herausfiltern. Darüber hinaus sind alle von {1,}Ihnen hinzugefügten Klammern und Quantifizierer reines Rauschen, und das Entfernen der nicht gierigen ( ?) Operatoren war sinnlos. Hier gibt es keine Verbesserung.
Alan Moore

Und wie man leere Zeichenfolgen vermeidet. Regex für leere Zeichenfolgen sollte true zurückgeben. Ich habe folgenden regulären Ausdruck verwendet (? =. * [0-9]) (? =. * [Az]) (? =. * [AZ]) (? =. * [@ # $% ^ & + =]) (? = \\ S + $). {8,15}
Coder

2
schlägt für _ Sonderzeichen fehl
Akhilesh

22

Ich hatte einige Schwierigkeiten, der beliebtesten Antwort für meine Umstände zu folgen. Zum Beispiel schlug meine Validierung mit Zeichen wie ;oder fehl [. Ich war nicht daran interessiert, meine Sonderzeichen in eine weiße Liste aufzunehmen, daher habe ich stattdessen [^\w\s]als Test - einfach ausgedrückt - die Übereinstimmung von Nicht-Wort-Zeichen (einschließlich numerischer Zeichen) und Nicht-Leerzeichen verwendet. Zusammenfassend ist hier, was für mich funktioniert hat ...

  • mindestens 8Zeichen
  • mindestens 1numerisches Zeichen
  • mindestens 1Kleinbuchstaben
  • mindestens 1Großbuchstaben
  • zumindest 1Sonderzeichen

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSFiddle Link - einfache Demo für verschiedene Fälle


2
Schön.
Ich

Gute, aber kleine Fehler. Es wird auch Leerzeichen akzeptiert, das kein gültiges Passwort ist, wenn wir Leerzeichen verwenden.
Dinesh.net

Ich mag diese Antwort wirklich, außer dass sie keine Unterstriche akzeptieren kann. Alles , was ich tat , war , ersetzt (?=.*?[^\w\s])mit (?=.*?([^\w\s]|[_]))Unterstützung für Unterstrichen hinzuzufügen und es funktioniert jetzt groß. Auch @ Dinish.net, das System, das ich verwende, schneidet das Leerzeichen aus der Kennwortzeichenfolge heraus, wenn wir es erhalten. Daher würde die Verwendung der Vanilla JS String.prototype.trim () -Methode gut funktionieren, wenn Sie diese Antwort verwenden möchten.
Devin Carpenter

15

Eine "allgemeinere" Version (?), Die keine englischen Buchstaben als Sonderzeichen zulässt .

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
  
  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });


13

Importieren Sie die JavaScript-Datei jquery.validate.min.js.

Sie können diese Methode verwenden:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. Mindestens ein englischer Großbuchstabe
  2. Mindestens ein englischer Kleinbuchstabe
  3. Mindestens eine Ziffer
  4. Mindestens ein Sonderzeichen

10

Probier diese:

  1. Mindestens sechs Zeichen
  2. Mindestens ein Großbuchstabe
  3. Mindestens ein Kleinbuchstabe
  4. Mindestens ein Sonderzeichen

Ausdruck:

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

Optionale Sonderzeichen:

  1. Mindestens ein Sonderzeichen
  2. Mindestens eine Nummer
  3. Sonderzeichen sind optional
  4. Mindestens sechs Zeichen und maximal 16 Zeichen

Ausdruck:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

Wenn die Min- und Max-Bedingung nicht erforderlich ist, entfernen Sie sie .{6, 16}

  • 6 ist die minimale Zeichenbegrenzung
  • 20 ist die maximale Zeichenbegrenzung
  • ? = bedeutet Übereinstimmungsausdruck

2
@ Madhu Ich habe meine Antwort für Ihre Bedingung für optionale Sonderzeichen aktualisiert
ojus kulkarni

7

Die Frage nicht direkt beantworten, aber muss es wirklich eine Regex sein?

Ich habe viel Perl gemacht und mich daran gewöhnt, Probleme mit Regexen zu lösen. Wenn sie jedoch mit all den Voraussichten und anderen Macken komplizierter werden, müssen Sie Dutzende von Komponententests schreiben, um all diese kleinen Fehler zu beseitigen.

Darüber hinaus ist ein Regex in der Regel einige Male langsamer als eine zwingende oder funktionale Lösung.

Zum Beispiel löst die folgende (nicht sehr FP) Scala-Funktion die ursprüngliche Frage etwa dreimal schneller als der reguläre Ausdruck der beliebtesten Antwort. Was es tut, ist auch so klar, dass Sie überhaupt keinen Komponententest benötigen:

def validatePassword(password: String): Boolean = {
  if (password.length < 8)
    return false

  var lower = false
  var upper = false
  var numbers = false
  var special = false

  password.foreach { c =>
    if (c.isDigit)       numbers = true
    else if (c.isLower)  lower = true
    else if (c.isUpper)  upper = true
    else                 special = true
  }

  lower && upper && numbers && special
}

7

Ich würde Peter Mortensen antworten, aber ich habe nicht genug Ruf.

Seine Ausdrücke sind perfekt für jede der angegebenen Mindestanforderungen. Das Problem mit seinen Ausdrücken, für die keine Sonderzeichen erforderlich sind, besteht darin, dass sie auch keine Sonderzeichen zulassen, sodass sie auch maximale Anforderungen erzwingen, die meines Erachtens vom OP nicht angefordert wurden. Normalerweise möchten Sie Ihren Benutzern erlauben, ihr Passwort so sicher zu machen, wie sie wollen. Warum sichere Passwörter einschränken?

Also, sein Ausdruck "mindestens acht Zeichen, mindestens ein Buchstabe und eine Zahl":

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

erreicht die Mindestanforderung, aber die verbleibenden Zeichen können nur Buchstaben und Zahlen sein. Um Sonderzeichen zuzulassen (aber nicht zu erfordern), sollten Sie Folgendes verwenden:

^(?=.*[A-Za-z])(?=.*\d).{8,}$ Zeichen zulassen

oder

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$ um bestimmte Sonderzeichen zuzulassen

Ebenso "mindestens acht Zeichen, mindestens ein Großbuchstabe, ein Kleinbuchstabe und eine Zahl:"

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

erfüllt diese Mindestanforderung, erlaubt jedoch nur Buchstaben und Zahlen. Verwenden:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ Zeichen zulassen

oder

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


Danke für die Erklärung.
Hải Nguyễn

Dies sollte als die richtige Antwort markiert werden. Die beste Antwort ist falsch.
Jake

6
Use the following Regex to satisfy the below conditions:

Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.

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

2
Inwiefern ist Ihre Antwort besser als die anderen Antworten, die vor Jahren geschrieben wurden?
JSantos

@ JoshYates1980 können Sie bitte das "Sonderzeichen" erwähnen, für das die Regex für Sie fehlgeschlagen ist. Lassen Sie mich das überprüfen und entsprechend aktualisieren. Aber soweit ich weiß, funktioniert es mit allen gemäß der Mandatsbedingung von 1 Sonderzeichen. Warten auf
Ihre

1
@ SHASHANKHONRAO Ich habe den Ausdruck aktualisiert auf: ^ (? =. * [Az]) (? =. * [AZ]) (? =. * \ D) (? =. * [$ @ $!% *? & + ~ |{}:;<>/])[A-Za-z\d$@$!%*?&+~| {} :; <> /] {8,15}, die die folgenden nichtalphanumerischen Zeichen enthalten: (@ $!% *? & + ~ `| {} :; <> /)
JoshYates1980

6

Was ist mit der Betrachtung der folgenden Regex-Lösung:

^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$

Was Folgendes bestätigt:

  1. Mindestens ein Kleinbuchstabe
  2. Mindestens ein Großbuchstabe
  3. Mindestens eine Ziffer
  4. Mindestens ein Sonderzeichen
  5. Es sollte mindestens 8 Zeichen lang sein.

Überprüfen Sie es unter dem folgenden Link: https://regex101.com/r/qPmC06/4/


Ihr vorgeschlagener Regex und der unter dem Link Regex101 variieren. Sollte es nicht sein ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W\_])[A-Za-z\d\W\_]{8,}$?
CraZ

1
@CraZ Ich habe den regulären Ausdruck bearbeitet, danke für Ihren Vorschlag.
Emerson Joel Rojas Soliz

3

Je nach Bedarf sollte dieses Muster einwandfrei funktionieren. Versuche dies,

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

Erstellen Sie einfach eine Zeichenfolgenvariable, weisen Sie das Muster zu und erstellen Sie eine boolesche Methode, die true zurückgibt, wenn das Muster korrekt ist, andernfalls false.

Stichprobe:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"

private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}

3

Ich habe hier viele Probleme gefunden, also habe ich meine eigenen gemacht.

Hier ist es in seiner ganzen Pracht, mit Tests:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/DCRR65/4/tests

Dinge, auf die Sie achten sollten:

  1. wird nicht verwendet, \wweil das beinhaltet _, worauf ich teste.
  2. Ich hatte viele Probleme, Symbole zu finden, ohne das Zeilenende zu finden.
  3. Gibt keine spezifischen Symbole an. Dies liegt auch daran, dass unterschiedliche Gebietsschemas möglicherweise unterschiedliche Symbole auf ihren Tastaturen haben, die sie möglicherweise verwenden möchten.

Dieser Regex-Pass, auch wenn Leerzeichen im Passwort enthalten sind, hat bei mir nicht funktioniert
Arthur Melo


2

@ClasG hat bereits vorgeschlagen :

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

_ (Unterstrich) wird jedoch nicht als Sonderzeichen akzeptiert (z. B. Aa12345_).

Eine verbesserte ist:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$

2

Demo:

function password_check() {
  pass = document.getElementById("password").value;
  console.log(pass);
  regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
  if (regex.exec(pass) == null) {
    alert('invalid password!')
  }
  else {
    console.log("valid");
  }
}
<input type="text" id="password" value="Sample@1">
<input type="button" id="submit" onclick="password_check()" value="submit">


2

Testen Sie dieses im Jahr 2020:

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

Überprüfen Sie sich

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

if ((m = regex.exec(str)) !== null) {
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}


Wie ist das besser als akzeptierte Antwort?
Toto

@Toto gibt es keine akzeptierte Antwort auf diesen Thread, zumindest sehe ich keine, es gibt Antworten mit vielen Stimmen, aber ich sehe keine akzeptierte Antwort. Außerdem habe ich dieses herausgefunden und es auf regex101 zur Gültigkeit gelesen. Deshalb habe ich es mit einem Code-Snippet geteilt, um auch die Gültigkeit zu überprüfen.
Mihir Kumar

1

Verwenden Sie den folgenden Regex, um die folgenden Bedingungen zu erfüllen:

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

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

Kann online testen: https://regex101.com


1

Nur können wir dies mit HTML5 tun.

Verwenden Sie den folgenden Code im Musterattribut.

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

Es wird perfekt funktionieren.


1

Sie können das folgende Muster für reguläre Ausdrücke verwenden, um das Kennwort zu überprüfen, ob es Ihren Erwartungen entspricht oder nicht.

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


1

Benutze das,

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

Es wird für mindestens einen Kleinbuchstaben, einen Großbuchstaben, eine Zahl und die Sonderzeichen von (!, @, #, $,%,?, =, *, &) Validiert.

Die minimale Länge beträgt 8 und die maximale Länge beträgt 20


Wie unterscheidet sich das von der akzeptierten Antwort?
Toto

0

Testen Sie in Java / Android ein Kennwort mit mindestens einer Zahl, einem Buchstaben und einem Sonderzeichen in folgendem Muster:

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

0

Versuche dies:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

Dieser reguläre Ausdruck funktioniert perfekt für mich.

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}

0

Muster für mindestens 1 Großbuchstaben, 1 Ziffer und Sonderzeichen sowie eine Länge zwischen 8 und 63.

^ (? =. [az]) (? =. [AZ]) (? =. * \ d) [a-zA-Z \ d \ W] {8,63} $

Dieses Muster wurde für die JAVA-Programmierung verwendet.


0

Hoffe das unten funktioniert. Ich habe dies in der benutzerdefinierten Azure-Richtlinie versucht.

^ (?. = [Az]) (?. = [AZ]) (?. = ?. \ D) (= [@ # $% ^ & * -_ + = [] {} | \:‘,? / ~&quot;();!])([A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/~ "();!] |. (?! @)) {6,16} $


0

Ich habe gerade die erste Antwort hier kopiert und sie in einen bequemeren regulären Ausdruck umgewandelt, der einen oberen, einen unteren und mindestens 8 Zeichen benötigt, aber alles "dazwischen" akzeptiert.

Dies ist ein Beispiel-Regex, der erfordert

  1. mindestens 8 Zeichen lang
  2. mindestens ein Kleinbuchstabe
  3. Mindestens ein Großbuchstabe

WICHTIG : Dieser reguläre Ausdruck schließt auch alle anderen Zeichen aus, z. B. Zahlen, Sonderzeichen wie $, #,! usw. - solange die Regeln 1. bis 3. mit der Eingabezeichenfolge übereinstimmen

^(?=.*[a-z])(?=.*[A-Z]).{8,}$

Pass auf "." fast am Ende des regulären Ausdrucks. Dies entspricht fast jedem (und afaik jedem lesbaren) Zeichen


0

Wenn Sie reguläre Ausdrücke verwenden möchten, um nach mindestens acht Zeichen zu suchen, mindestens einem Großbuchstaben, mindestens einem Kleinbuchstaben, mindestens einer Zahl von 0 bis 9 und mindestens einem Sonderzeichen von :! @ # $% ^ & * _? UND geben Sie dem Benutzer auch ein bisschen mehr Informationen darüber, was im Passwort fehlt. Sie können den folgenden Code verwenden:

let password = "@Aa3a4d$";

//  Check every single condition separately
let lowercase = password.match((/[a-z]+/g));
let uppercase = password.match((/[A-Z]+/g));
let digits = password.match((/[\d]+/g));
let special = password.match((/[!@#$%^&*_]+/g));
let lenght = password.match((/[A-Za-z\d!@#$%^&*_]{8,}/g));

//  Array to store information about any mismatches in the string
let errors = [];

if (password === '' ) {
    errors.push('Password is required');
}
if (lowercase === null) {
    errors.push('Password must include at least one lowercase letter');
}
if (uppercase === null) {
    errors.push('Password must include at least one uppercase letter');
}
if (digits === null) {
    errors.push('Password must include at least one digit from 0 to 9');
}
if (special  === null) {
    errors.push('Password must include at least one special character');
}
if (lenght === null) {
    errors.push('Password must include at least 8 characters');
}
if (errors.length > 0) {
    console.log(errors);
    return;
} else {
    // Process your password
}

-1

Eine Lösung, die ich in einer der vorherigen Antworten gefunden habe:

* Mindestens 8 Zeichen, mindestens 1 Großbuchstaben, 1 Kleinbuchstaben, 1 Zahl und 1 Sonderzeichen:

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

... hat bei mir nicht funktioniert, aber das Folgende ist eine vereinfachte Version und funktioniert hervorragend (fügen Sie ein beliebiges Sonderzeichen hinzu, ich habe hier # hinzugefügt) und fügen Sie die Zahlenregel hinzu, wie Sie es mit den Buchstaben tun:

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

1
Dies quantifiziert einen positiven Lookahead.
ctwheels
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.