[JAVA] REGEX complexe

dream' Messages postés 4 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

J'essaye d'écrire une expression rationelle me permettant de vérifier si mon mot de passe contient au moins 3 des 4 paramètres suivants :
- Une minuscule
- Une majuscule
- Un caractere special
- Un nombre

J'en ai mis une au point me permettant de vérifier si l'ensemble des paramètres sont présents. Existe un moyen de savoir si seulement 3 des 4 ont ete entrés par l'utilisateur ?

Merci d'avance.

Cordialement,

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Pourquoi chercher à faire une expression régulière pour ce genre de tests ?
    L'analyse d'une regex complexe sera nettement plus longue en temps de calculs qu'une petite boucle qui teste les caractères un à un, en Java ça n'a donc pas d'utilité.

    public static int verif(String str)
    {
    	boolean min=false, maj=false, num=false, spe=false;
    	
    	for (char ch : str.toCharArray())
    	{
    		min |= Character.isLowerCase(ch);
    		maj |= Character.isUpperCase(ch);
    		num |= Character.isDigit(ch);
    		spe |= !Character.isLetterOrDigit(ch);
    		
    		if (min && maj && num && spe) break;
    	}
    	
    	int n=0;
    	if (min) n++;
    	if (maj) n++;
    	if (num) n++;
    	if (spe) n++;
    	return n;
    }
    
    public static void main(String...args)
    {
    	System.out.println(verif("AZERTY")); // 1
    	System.out.println(verif("qwerty")); // 1
    	System.out.println(verif("123456")); // 1
    	System.out.println(verif("+-*/%=")); // 1
    	
    	System.out.println(verif("AWerty")); // 2
    	System.out.println(verif("1+2=12")); // 2
    	
    	System.out.println(verif("Az2*m7")); // 4
    }
    0