Validazione di password con Regular Expression
DOMANDA:
Come posso convalidare una password di almeno 8 caratteri che deve contenere almeno un carattere e almeno un numero?
RISPOSTA:
La soluzione più laboriosa consiste nell'effettuare la ricerca all'interno della stringa con i metodi classici di java (operazioni su stringhe).
Vorrei però proporvi un metodo alternativo più elegante e compatto utilizzando le Regular Expression:
Questo codice verifica se la password inserita è lunga almeno 8 e massimo 20 caratteri e contiene almeno una lettera e almeno un numero:
package regex; public class RegexTest { public static void main(String args[]){ Pattern pattern = Pattern.compile("((?=.*[0-9])(?=.*[a-zA-Z]).{8,20})"); Matcher matcher = pattern.matcher("password1"); System.out.println(matcher.matches()); } }
oppure, semplicemente:
package regex; public class RegexTest { public static void main(String args[]){ String s = "password1"; System.out.println( s.matches("((?=.*[0-9])(?=.*[a-zA-Z]).{8,20})")); } }
Entrambi i codici stamperanno a video true poiché la password "password1" rispetta le caratteristiche richieste dalla regular expression.
Infatti:
1. (?=.*[0-9]) significa che deve esserci almeno un numero in tutta la stringa (indipendentemente dalla posizione)
2. (?=.*[a-zA-Z]) significa che deve esserci almeno un carattere (maiuscolo o minuscolo) in tutta la stringa (indipendentemente dalla posizione)
1. (?=.*[0-9]) significa che deve esserci almeno un numero in tutta la stringa (indipendentemente dalla posizione)
2. (?=.*[a-zA-Z]) significa che deve esserci almeno un carattere (maiuscolo o minuscolo) in tutta la stringa (indipendentemente dalla posizione)
3. l'operatore . ci dice che devono essere verificati tutti i test precedenti (quindi quelli al punto 1 e 2)
4. {8,20} indica il numero minimo e massimo di occorrenze del precedente test (quindi da 8 a 20 caratteri)
non far inserire spazi nella sequenza è possibile?come?
RispondiEliminagrazie comunque del tutorial
Ciao, ti consiglio di leggere questa pagina web: http://gborgese.wikidot.com/espressioni-regolari
EliminaCome puoi vedere l'accento circonflesso ^ permette di escludere alcuni caratteri. In particolare il carattere spazio è identificato come \s (da notare s minuscola).
Grazie mille della disponibilità,gentilissimo.
EliminaCome faccio a rendere solo il primo carattere maiuscolo??
RispondiElimina