PDA

Visualizza la versione completa : RegularExpressionValidator


Masi13
09-12-2005, 11:56
Vorrei sapere come faccio con una espressione regolare a controllare se in una parola di almeno 8 caratteri viene inserita almeno una lettera minuscola,una maiuscola,una cifra e una carattere speciale,indipendentemente dalla loro disposizione?Io riesco afare il controllo solo su 4 inserimenti e solo nell'ordine in cui le controllo!

Mich_
09-12-2005, 12:23
Credo si debbano fare i 4 controlli separati, poi fare l'and dei risultati.

Masi13
09-12-2005, 12:32
I controlli riesco a farli ma me li esegue nell'ordine in cui sono scritti!
Per esempio :
(([^a-zA-Z0-9][a-z][A-Z]\d))|([^a-zA-Z0-9][a-z][A-Z]))

sono costretto ad inserire una parola del tipo:

!aA1

sescrivo anche

a!A1

in piu se aggiungo {8,} alla fine sono costretto a ripetere tutti i tipi 8 volte mentre io voglio inserire almeno 8 o piu caratteri dove deve essere presente almeno una volta ogni tipo in ordine casuale!

Mich_
12-12-2005, 11:48
Se vuoi fare tutto in una unica RE, la cosa si complica enormemente.
Conviene fare i singoli controlli con espressioni separate, e poi mettere insieme il risultato dei controlli.

Esempio:

~ /([^a-zA-Z0-9])/;
my $ok = $1.length;
~ /([a-z])/;
$ok *= $1.length;
~ /([A-Z])/;
$ok *= $1.length;
~ /(\d)/;
$ok *= $1.length;
if($ok) # tutte le condizioni verificate

Masi13
12-12-2005, 11:54
Ho trovato la soluzione:
^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$|^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$|^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$|^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[^a-zA-Z0-9]).*$|^.*(?=.{8,})(?=.*\d)(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).*$

Unpo lunghetta ma soddisfa pienamente le richieste !Al massimo non controlla la stringa vuota,ma per quello basta un'altro validatore per la presenza di stringa!
Comunque grazie lo stesso!

Loading