2010-02-07 13 views
10

Sto creando un sistema di registrazione che ha bisogno di controllare il nome/pass ecc REGEX (e preferiscono), quello che ho finora è:PHP: semplici espressioni regolari per abbinare la lunghezza?

//Check so numbers aren't first, such as 00foobar 
preg_match('/^(?!\d)[a-z0-9]+$/iD',$usrname); 
//Just simple check 
preg_match('/^[a-zA-Z0-9]+$/',$psword); 

Ma devo fare cose stupide nelle dichiarazioni se come:

if strlen($psword) > 30 || if (strlen($psword) < 4) ....

Come dovrei impliment il controllo di lunghezza nelle mie due prospetti originali espressioni regolari? Questo mi farebbe molto felice ..

+0

Non penso che il "se" sia per niente stupido. È perfettamente leggibile; non devi fare tutto in una singola regex. In ogni caso, * per favore * permetti più caratteri di quelli nelle password. Come qualcuno a cui piace usare password correttamente sicure con una vasta gamma di punteggiatura, non c'è niente di più frustrante di un sito che limita inutilmente le password agli alfanumerici. – bobince

+0

@bobince 30 ha suonato come un numero abbastanza buono, un "grande", sto lavorando a un progetto con qualcuno, quindi lo aggiungerò più in alto e spiegherò. –

risposta

15

stesso, ma utilizzando il d \ w e \ per parola e cifre, ma si potrebbe voler includere anche i simboli di base come %!?/ ... etc...

preg_match('/^[\w\d]{4,30}$/',$psword); 

il {n,v} sarebbe convalidare per n minimo e v elementi massimo prima .

come A{2,3} sarebbe valido per AA e AAA. potete dare un'occhiata there per ulteriori riferimenti

Allo stesso modo se si desidera impostare solo il minimo di patern {n} lo farebbe.

+1

Se si imposta la dimensione di una password, suggerirei più di 30 caratteri. Alcune persone hanno password lunghe e buone per loro. È più sicuro. –

+0

Dato che questo è di 30 caratteri: 'thisais30characterspasswordyay'. So che una delle mie password è più lunga di quella. –

+0

@ Charchar102, Hai ragione, ma questo è per un gioco semplice, quindi forse lo terrò a 40. –

4

Penso che questo dovrebbe fare il trucco:

preg_match ('/^[a-zA-Z0-9] {4,30} $ /', $ psword);

Problemi correlati