2013-10-21 18 views
10

Ho cercato espressioni regolari che accettano almeno due cifre e un carattere speciale e la lunghezza minima della password è 8. Finora ho fatto il seguente: [[email protected]#$%0-9]*[[email protected]#$%0-9]+[[email protected]#$%0-9]*Espressione regolare per password (almeno 2 cifre e un carattere speciale e lunghezza minima 8)

+0

possibile duplicato del [espressioni regolari per la convalida della password] (http://stackoverflow.com/questions/7245267/regular-expressions-for-password-validation) – Toto

risposta

3

Prova questa espressione regolare. Usa lookahead per verificare che ci siano almeno due cifre e uno dei caratteri speciali elencati da te.

^(?=.*?[0-9].*?[0-9])(?=.*[[email protected]#$%])[[email protected]#$%0-9]{8,}$ 

SPIEGAZIONE

^ #Match start of line. 

(?=.*?[0-9].*?[0-9]) #Look ahead and see if you can find at least two digits. Expression will fail if not. 

(?=.*[[email protected]#$%]) #Look ahead and see if you can find at least one of the character in bracket []. Expression will fail if not. 

[[email protected]#$%0-9]{8,} #Match at least 8 of the characters inside bracket [] to be successful. 

$ # Match end of line. 
+0

Sembra 0-9 è dichiarato due volte nella tua lista di caratteri : [0-9a-zA-Z! @ # $% 0-9] – blatt

28

Qualcosa come questo dovrebbe fare il trucco.

^(?=(.*\d){2})(?=.*[a-zA-Z])(?=.*[[email protected]#$%])[[email protected]#$%]{8,} 

(?=(.*\d){2}) - uses lookahead (?=) and says the password must contain at least 2 digits 

(?=.*[a-zA-Z]) - uses lookahead and says the password must contain an alpha 

(?=.*[[email protected]#$%]) - uses lookahead and says the password must contain 1 or more special characters which are defined 

[[email protected]#$%] - dictates the allowed characters 

{8,} - says the password must be at least 8 characters long 

Potrebbe essere necessario un piccolo ritocco, ad es. specificando esattamente quali caratteri speciali hai bisogno ma dovrebbe fare il trucco.

+0

Questo è stato molto utile e dettagliato e per gli altri che vengono qui lascerò [questa guida] (http://www.cheatography.com/ davechild/cheat-sheets/regular-expressions /) che mi aiutano a personalizzare la tua risposta un po 'di più. – CupOfJoe

3

Provate questo:

^(?=.*\d{2,})(?=.*[$-/:-?{-~!"^_`\[\]]{1,})(?=.*\w).{8,}$ 

Ecco come funziona poco:

  • (?=.*\d{2,}) questa parte dicendo ad eccezione di almeno 2 cifre
  • (?=.*[$-/:-?{-~!"^_ []] {1,}) `questi sono caratteri speciali, almeno 1
  • (?=.*\w) e il resto sono lettere qualsiasi (uguale a [A-Za-z0-9_])
  • .{8,}$ questo dice almeno 8 caratteri incluse tutte le regole precedenti. Di seguito la mappa per regexp corrente (fatta con l'aiuto di Regexper) Regexp map UPD

Regexp dovrebbe assomigliare a questa ^(?=(.*\d){2,})(?=.*[$-\/:-?{-~!"^_'\[\]]{1,})(?=.*\w).{8,}$ Partenza commenti per ulteriori dettagli.

+1

Questo corrisponderà a 2 cifre solo se sono consecutivi, cosa che non penso sia il caso con la password. – justhalf

+0

@justhalf, sì, hai ragione. La parte con le cifre dovrebbe apparire come questa '(? = (. * \ D) {2,})'. E regexp come questo '^ (? = (. * \ D) {2,}) (? =. * [$ - \ /: -? {- ~!"^_ '\ [\]] {1,}) (? =. * \ w). {8,} $ '. Grazie per una nota. – Valerii

0

Le espressioni regolari definiscono una struttura sulla stringa che si sta tentando di trovare. A meno che non si definisca una struttura spaziale sulla propria espressione regolare (ad esempio almeno due cifre seguite da un carattere speciale, seguito da ...) non è possibile utilizzare uno regex per convalidare la stringa.

8

Non vi è alcuna ragione per implementare tutte le regole in una singola regex. considerazione di farlo come in tal modo:

Pattern[] pwdrules = new Pattern[] { 
    Pattern.compile("........"), // at least 8 chars 
    Pattern.compile("\d.*\d"),  // 2 digits 
    Pattern.compile("[-!"§$%&/()=?+*~#'_:.,;]") // 1 special char 
    } 

String password = ......; 
boolean passed = true; 

for (Pattern p : pwdrules) { 
    Matcher m = p.matcher(password); 
    if (m.find()) continue; 
    System.err.println("Rule " + p + " violated."); 
    passed = false; 
} 

if (passed) { .. ok case.. } 
else { .. not ok case ... } 

Questo ha il vantaggio che le regole Passwort possono essere aggiunti, rimossi o modificati senza sforzo. Possono persino risiedere in qualche file ressource.

Inoltre, è appena più leggibile.

+0

" Non vi è alcun motivo per implementare tutte le regole in una singola regex. " Come lo sai? – drowa

+0

@drowa Quale sarebbe un motivo? – Ingo

+0

Immagina un sistema CMS che accetta solo espressioni regolari per la convalida del campo password e la modifica di questo sistema CMS non è un'opzione. – drowa

Problemi correlati