[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,
A voir également:

1 réponse

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