2016-06-22 4 views
-1

Passwort Stellen Sie sicher, die folgenden Kriterien erfülltPasswort Regex mit drei beliebigen Kombination aber keine Leerzeichen

  • Länge: 8-32 Zeichen
  • Passwort atleast 3 der folgenden Angaben enthalten: Versalien, Klein, Zahl, Symbol
  • Passwort darf keine Leerzeichen enthalten
  • Passwort Zeichen erlaubt:

    [email protected]#$%^*()_+Aa1~`-={}[]|\:;"',.?/ 
    

Ich habe versucht:

^.*(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W])^(?!.*[&])(?=.*[[email protected]#$%^*()_+Aa1~`\-={}[\]|\:;"',.?/])\S{8,32}$ 

Ich habe diese Regex geschrieben, aber erzwingt Einen Großbuchstaben, die nicht der Fall sein sollte ....... Es sollten alle drei Kombinationen von Versalien akzeptieren, Kleinbuchstaben, Zahlen, Symbole:

[email protected]#$%^*()_+Aa1~`-={}[]|\:;"',.?/ 

Die Regex-Grenze 255 Zeichen. Irgendwelche Vorschläge helfen dabei bitte.

+0

Sorry, wenn ich frage, aber ist das notwendig? Ein kurzes Passwort mit einer hohen Variabilität von Zeichen ist immer noch ein schwaches Passwort, während ein langes Passwort mit nur Buchstaben stärker ist –

+0

Das ist die Voraussetzung. Ich kann das nicht ändern. Danke für die Nachfrage :) – Ros

+2

Welcher Geschmack ist es? –

Antwort

0

können Sie verwenden:

^(?=.*[[email protected]#$%^*()_+~`={}|:;"',.?\[\]\/-].*)(?=.*[A-Z].*)(?=.*[a-z].*)[\[email protected]#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$| 
^(?=.*[[email protected]#$%^*()_+~`={}|:;"',.?\[\]\/-].*)(?=.*\d.*)(?=.*[a-z].*)[\[email protected]#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$| 
^(?=.*[[email protected]#$%^*()_+~`={}|:;"',.?\[\]\/-].*)(?=.*[A-Z].*)(?=.*\d.*)[\[email protected]#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$| 
^(?=.*\d.*)(?=.*[A-Z].*)(?=.*[a-z].*)[\[email protected]#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$ 

Siehe LiveDemo


Wenn Sie ein bisschen mehr Flexibilität wünschen, können Sie diese verwenden:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Dummy{ 
    public static void main(String []args){ 
     String password = "aaaZZZ111"; 
     String specials = "[email protected]#$%^*()_+~`={}|:;\"',.?\\[\\]\\/-"; 
     String uppercase = "A-Z"; 
     String lowercase = "a-z"; 
     String numbers = "\\d"; 
     String all = specials + uppercase + lowercase + numbers; 
     int min = 8; 
     int max = 32; 

     String regex = 
     "^" + lookahead(specials) + lookahead(uppercase) + lookahead(lowercase) + "[" + all + "]{"+ min +"," + max + "}$|" + 
     "^" + lookahead(specials) + lookahead(uppercase) + lookahead(numbers) + "[" + all + "]{"+ min +"," + max + "}$|" + 
     "^" + lookahead(specials) + lookahead(lowercase) + lookahead(numbers) + "[" + all + "]{"+ min +"," + max + "}$|" + 
     "^" + lookahead(uppercase) + lookahead(lowercase) + lookahead(numbers) + "[" + all + "]{"+ min +"," + max + "}$"; 

     Pattern r = Pattern.compile(regex); 

     Matcher m = r.matcher(password); 
     if (m.find()) { 
     System.out.println("OK"); 
     } else { 
     System.out.println("NO MATCH"); 
     } 
    } 

    public static String lookahead(String input) { 
     return "(?=.*[" + input + "].*)"; 
    } 
} 
+0

Können wir auf jeden Fall eine kürzere Version haben? – Ros

+0

es akzeptiert Leerzeichen und Symbol & was nicht sein sollte – Ros

+0

Funktioniert jetzt gut. Bitte teilen Sie, wenn Sie eine kürzere Version des Regex haben. – Ros

1
^(?:[A-Z]()|[a-z]()|[0-9]()|[[email protected]#$%^*()_+~`={}\[\]|\:;"',.?/-]())+$(?:\1\2\3|\1\2\4|\1\3\4|\2\3\4) 

In lesbarer Form:

^ 
(?: 
    [A-Z]() | 
    [a-z]() | 
    [0-9]() | 
    [[email protected]#$%^*()_+~`={}\[\]|\\:;"',.?/-]() 
)+ 
$ 
(?: 
    \1\2\3 | 
    \1\2\4 | 
    \1\3\4 | 
    \2\3\4 
) 

Was ist mit leeren Capturing-Gruppen als Kontrollkästchen ich tue, Auszählung, die Arten von Zeichen über den Verlauf des Spiels zu sehen waren. Wenn zum Beispiel kein Großbuchstabe in der Zeichenfolge vorhanden ist, nimmt Gruppe 1 niemals an der Übereinstimmung teil, sodass \1 am Ende nicht erfolgreich ist. Wenn nicht alle drei anderen Gruppen teilnehmen, schlägt das Spiel fehl.

Beachten Sie, dass diese Technik nicht in allen Geschmacksrichtungen funktioniert. In JavaScript beispielsweise ist eine Rückreferenz zu einer leeren Gruppe immer erfolgreich, auch wenn die Gruppe nicht an der Übereinstimmung teilgenommen hat.

Verwandte Themen