2010-03-06 15 views
8

ho i seguenti requisiti di password:RegEx Per Strong password

1) Dovrebbe essere 6-15 caratteri di lunghezza
2) dovrebbe avere almeno uno carattere minuscolo
3) dovrebbe avere almeno uno carattere maiuscolo
4) Dovrebbe avere almeno uno numero
5) Dovrebbe avere almeno uno speciale carattere
6) non dovrebbe avere spazi

qualcuno mi può suggerire un RegEx per questo requisito?

+4

limitare la lunghezza di un la password è raramente una buona idea – TomHastjarjanto

+0

Perché deve essere una regex? Questo sarebbe più leggibile come codice ordinario. –

+0

Mark: Probabilmente sta cercando un reg-ex in modo che possa essere utilizzato lato client e server in un controllo di convalida asp.net. – bkaid

risposta

8

Non sono del tutto sicuro di cosa si intende per "carattere speciale", così sto interpretando questo significa \W, ma è possibile modificare questo se si desidera:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W)\S{6,15}$ 
+4

+1, ma fai attenzione al bug: http://blog.stevenlevithan.com/archives/regex-lookahead-bug –

+0

+1 Alan. È sempre utile sapere degli errori documentati! –

11
Non

sicuro avrei usato un Regex per questo: regex non sono sempre lo strumento giusto per ogni possibile tipo di lavoro ...

Qui, si specifica una lista di 6 requisiti; quindi, perché non utilizzare solo 6 test diversi, uno per requisito?
Questi 6 test diversi, dovrei aggiungere, sarebbero davvero semplici - mentre un Regex sarebbe molto più difficile da scrivere (hai chiesto aiuto - probabilmente non avresti avuto per i 6 test).

Questo renderebbe il tuo codice molto più facile da capire, scommetto ;-)
E anche: più facile da mantenere; e più facile aggiungere/rimuovere/modificare una delle condizioni corrispondenti a uno dei requisiti.

+6

Il secondo vantaggio di questo metodo sarebbe fornire messaggi di errore migliori quando una password non soddisfa i requisiti. Ad esempio, indicando * quale * tipo di carattere richiesto è stato omesso. Non c'è niente di più frustrante che inserire una password che pensi funzioni e ricevere un messaggio di errore generico. – Emily

+0

@thekaido: lo stesso per i 6 test, anche se la sintassi potrebbe essere un po 'diversa ;;; @ Emily: così vero! –

+0

Aspetta! Uno strumento non funziona per tutti i lavori? Se è così, stai anche dicendo che non dovrei usare una motosega per la raffinata lavorazione del legno decorativa che sto per fare! Accidenti! Sono stato fortunato lì! –

3

Regexlib.com ha un sacco di esempi per te e un database ricercabile di reg ex.

+0

+1 per il collegamento – citronas

1
1 => /^.{6,15}$/ 
2 => /[a-z]/ 
3 => /[A-Z]/ 
4 => /\d/ 
5 => /[#{special_chars_for_regex}]/ 
6 => /^\S*$/ 
+0

'\ W' significa * non-parola-carattere *, non * non-spazio bianco * (che è' \ S', ma si potrebbe anche incorporarlo nella prima condizione come @Mark Byers ha fatto). Inoltre, "caratteri speciali" significa solo punteggiatura. –

+0

Ho cambiato '\ W' in' \ S' (grazie). Non avevo voglia di sillabare il set completo di caratteri speciali, ma '[email protected] # $%^& * -_ = + [{]} \ | ;: '", <.> /?()' Potrebbe fare in un pizzico. – yfeldblum