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?

12voto

Dana Punkte 151

Dies hat bei mir funktioniert:

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@$!%*?&])([a-zA-Z0-9@$!%*?&]{8,})$
  • Mindestens 8 Zeichen lang;
  • Ein Kleinbuchstabe, ein Großbuchstabe, eine Zahl und ein Sonderzeichen;
  • Keine Leerzeichen.

12voto

Heikki Salokanto Punkte 271

Nicht direkt auf die Frage antworten, aber muss es wirklich ein Regex sein?

Früher habe ich viel Perl gemacht und habe mich daran gewöhnt, Probleme mit Regexen zu lösen. Wenn sie jedoch komplizierter werden mit all den Vorwärts- und anderen Macken, müssen Sie Dutzende von Einheitstests schreiben, um all diese kleinen Fehler zu beseitigen.

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

Zum Beispiel löst die folgende (nicht sehr FP) Scala-Funktion die ursprüngliche Frage etwa dreimal schneller als der Regex der beliebtesten Antwort. Und was sie tut, ist so klar, dass Sie überhaupt keinen Einheitstest 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
}

12voto

ojus kulkarni Punkte 1798

Probieren Sie dieses:

  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 Mindest- und Höchstbedingung nicht erforderlich ist, entfernen Sie .{6, 16}

  • 6 ist das Mindest-Zeichenlimit
  • 20 ist das maximale Zeichenlimit
  • ?= bedeutet Ausdruck abgleichen

11voto

Was halten Sie von folgender Regex-Lösung:

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

Die folgendes validiert:

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

Probieren Sie es aus unter folgendem Link https://regex101.com/r/qPmC06/4/

11voto

Steve Johnson Punkte 2844

Für eine strengere Validierung, bei der Folgendes erforderlich ist:

  1. Mindestens ein Großbuchstabe
  2. Mindestens ein Kleinbuchstabe
  3. Mindestens eine Ziffer
  4. Mindestens ein Symbol/Sonderzeichen @$!%*#?&^_-
  5. Mindestens 8 Zeichen/Ziffern

Regex:

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

Ich hoffe, es hilft jemandem bei einer strengeren Vorgehensweise.

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