Fonction de test mot de passe (regexp)

Eléphant du PHP | 291 Messages

16 juil. 2013, 10:19

Bonjour,
Je voudrais faire une fonction pour vérifier la nature d'un mot de passe selon plusieurs critères.
En fonction du niveau le mot de passe doit respecter certains critères :

Niveau 1 : Alpha obligatoire, Chiffres et majuscules (ou autres) optionnel - longueur mini : 5
Niveau 2 : Alpha obligatoire, Chiffres obligatoire, Majuscules (ou autres) optionnel - longueur mini : 7
Niveau 3 : Alpha obligatoire, Chiffres obligatoire, Majuscules obligatoire, autres optionnel - longueur mini : 7
Niveau 4 : Alpha obligatoire, Chiffres obligatoire, Majuscules obligatoire, Autres obligatoire (caractères spéciaux: +@_-:*=) - longueur mini : 8

Quand le caractère est obligatoire au moins 1 doit être présent.

Ma fonction :
	function checkPassword($level,$password){
		switch($level){
			case 1:
				if(preg_match_all("/((?:[a-z0-9A-Z])(?:[A-Z0-9])?.{5,255})/", $password, $matches)){
					return true;
				}else{
					return false;
				}
				break;
			case 2:
				if(preg_match_all("/((?=.*\d)(?=.*[a-z])(?:[A-Z]+)?(?=.*[0-9]).{7,255})/", $password, $matches)){
					return true;
				}else{
					return false;
				}
				break;
			case 3:
				if(preg_match_all("/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{7,255})/", $password, $matches)){
					return true;
				}else{
					return false;
				}
				break;
			case 4:
				if(preg_match_all("/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,255})/", $password, $matches)){
					return true;
				}else{
					return false;
				}
				break;
				break;
			default:
				return false;
		}
	}
J'aurais besoin de votre avis pour savoir si ma fonction est correct. J'ai fais des test avec l'aide du site http://www.lumadis.be/regex/test_regex.php
Pour le niveau 4 je ne sais pas comment obliger les caractères spéciaux.

D'avance merci.