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)

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)



Commenti

  1. non far inserire spazi nella sequenza è possibile?come?

    grazie comunque del tutorial

    RispondiElimina
    Risposte
    1. Ciao, ti consiglio di leggere questa pagina web: http://gborgese.wikidot.com/espressioni-regolari

      Come puoi vedere l'accento circonflesso ^ permette di escludere alcuni caratteri. In particolare il carattere spazio è identificato come \s (da notare s minuscola).

      Elimina
    2. Grazie mille della disponibilità,gentilissimo.

      Elimina
  2. Come faccio a rendere solo il primo carattere maiuscolo??

    RispondiElimina

Posta un commento

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java