2017-05-07 4 views
1

Ich habe gerade diese Klasse für eine Validierung Passwort erstelltJava Regex Ausdrücke für Passwörter

/* 
*^      Start anchor 
* (?=.*[A-Z].*[A-Z])  Ensure string has two uppercase letters. 
* (?=.*[[email protected]#$&*])   Ensure string has one special case letter. 
* (?=.*[0-9].*[0-9])  Ensure string has two digits. 
* (?=.*[a-z].*[a-z].*[a-z]) Ensure string has three lowercase letters. 
* .{8}      Ensure string is of length 8. 
* $       End anchor. 
*/ 
public class PasswordUtils { 

    private static final String PWD_REGEX = "^(?=.*[A-Z].*[A-Z])(?=.*[[email protected]#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z])"; 

    /** 
    * Non instantiable. 
    */ 
    private PasswordUtils() { 
     throw new AssertionError("Non instantiable"); 
    } 

    public static boolean match (String pwd1, String pwd2) { 
     return StringUtils.equals(pwd1, pwd2); 
    } 

    public static boolean isStrong(String password){ 
     return password.matches(PWD_REGEX); 
    } 
} 

Dann dieser Junit, aber es scheint, dass die Entsenderichtlinie nicht den Anforderungen des regulären Ausdrucks übereinstimmen

private final String PWD6 = "Pi89pR&s"; 

@Test 
public void testStrong() { 
    assertTrue(PasswordUtils.isStrong(PWD6)); 
} 
+4

Es ist einfacher, nicht Regex zu verwenden. Iterieren Sie die Zeichenfolge einfach um jeweils ein Zeichen, wobei Sie die Anzahl der Groß- und Kleinbuchstaben usw. zählen. Stellen Sie dann sicher, dass die Werte Ihren Kriterien entsprechen. –

Antwort

1

diese Hoffnung Versuchen Sie, diese Sie heraus ..

Regex helfen:^(?=.*?[A-Z].*?[A-Z])(?=.*?[a-z].*?[a-z].*?[a-z])(?=.*?[\d].*?[\d])(?=.*?[^\w]).{8}$

1.^ Beginn der Zeichenfolge.

2.(?=.*?[A-Z].*?[A-Z]) positive Vorschau für zwei Großbuchstaben.

3.(?=.*?[a-z].*?[a-z].*?[a-z]) positiv nach drei Kleinbuchstaben suchen.

4.(?=.*?[\d].*?[\d]) positiv voraus für zwei Ziffern.

5.(?=.*?[^\w]) positiven Blick in die Zukunft für Nicht-Wortzeichen

6..{8} wird genau 8 Zeichen übereinstimmen.

7.$ Ende der Zeichenfolge.

Regex code demo

1

Versuchen Sie folgendes:

(?=(?:.*[A-Z]){2})(?=(?:.*[a-z]){2})(?=(?:.*[0-9]){2})(?=(?:.*[[email protected]#$&*]){1}).{8}

Die Grundidee ist:

(?=(?:.*[GROUP]){NUMBER})

Wo GROUP ist die Gruppierung Sie (das heißt A-Z) übereinstimmen soll und NUMBER ist, wie viele.

Beachten Sie auch, Sie können {NUMBER,} verwenden, wenn Sie NUMBER oder mehrere Vorkommen jeder Gruppe übereinstimmen möchten.

https://regex101.com/r/JGtIkF/1