Motif d’expression régulière de mot de passe
((?=.** \d)(?=.** [a-z])(?=.** [A-Z])(?=.** [@#$%]).{6,20})
La description
( # Start of group (?=.** \d) # must contains one digit from 0-9 (?=.** [a-z]) # must contains one lowercase characters (?=.** [A-Z]) # must contains one uppercase characters (?=.** [@#$%]) # must contains one special symbols in the list "@#$%" . # match anything with previous condition checking {6,20} # length at least 6 characters and maximum of 20 ) # End of group
? = - signifie appliquer la condition d’assertion, sans signification en soi, toujours travailler avec une autre combinaison
Toute combinaison est une moyenne, chaîne de 6 à 20 caractères avec au moins un chiffre, une lettre majuscule, une lettre minuscule et un symbole spécial («@ # $%»). Ce modèle d’expression régulière est très utile pour implémenter un mot de passe fort et complexe.
P.S L’ordre des formules de regroupement n’a pas d’importance .
1. Exemple d’expression régulière Java
PasswordValidator.java
package com.mkyong.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PasswordValidator{ private Pattern pattern; private Matcher matcher; private static final String PASSWORD__PATTERN = "((?=.** \\d)(?=.** [a-z])(?=.** [A-Z])(?=.** [@#$%]).{6,20})"; public PasswordValidator(){ pattern = Pattern.compile(PASSWORD__PATTERN); } /** ** ** Validate password with regular expression ** @param password password for validation ** @return true valid password, false invalid password ** / public boolean validate(final String password){ matcher = pattern.matcher(password); return matcher.matches(); } }
2. Mot de passe correspondant:
{vide} 1. mkyong1A @ 2. mkYOn12 $
3. Le mot de passe qui ne correspond pas:
{vide} 1. mY1A @, trop court, minimum 6 caractères 2. mkyong12 @, des lettres majuscules sont requises 3. mkyoNg12 , le symbole spécial “ ” n’est pas autorisé ici 4. mkyonG $$, un chiffre est requis 5. MKYONG12 $, des minuscules sont Champs obligatoires
4. Test unitaire - PasswordValidator
Test unitaire avec TestNG .
PasswordValidatorTest.java
package com.mkyong.regex; import org.testng.Assert; import org.testng.annotations.** ; /** ** ** Password validator Testing ** @author mkyong ** ** /public class PasswordValidatorTest { private PasswordValidator passwordValidator; @BeforeClass public void initData(){ passwordValidator = new PasswordValidator(); } @DataProvider public Object[][]ValidPasswordProvider() { return new Object[][]{ {new String[]{ "mkyong1A@", "mkYOn12$", }} }; } @DataProvider public Object[][]InvalidPasswordProvider() { return new Object[][]{ {new String[]{ "mY1A@","mkyong12@","mkyoNg12** ", "mkyonG$$","MKYONG12$" }} }; } @Test(dataProvider = "ValidPasswordProvider") public void ValidPasswordTest(String[]password) { for(String temp : password){ boolean valid = passwordValidator.validate(temp); System.out.println("Password is valid : " + temp + " , " + valid); Assert.assertEquals(true, valid); } } @Test(dataProvider = "InvalidPasswordProvider", dependsOnMethods="ValidPasswordTest") public void InValidPasswordTest(String[]password) { for(String temp : password){ boolean valid = passwordValidator.validate(temp); System.out.println("Password is valid : " + temp + " , " + valid); Assert.assertEquals(false, valid); } } }
5. Test unitaire - Résultat
Password is valid : mkyong1A@ , true Password is valid : mkYOn12$ , true Password is valid : mY1A@ , false Password is valid : mkyong12@ , false Password is valid : mkyoNg12** , false Password is valid : mkyonG$$ , false Password is valid : MKYONG12$ , false PASSED: ValidPasswordTest([Ljava.lang.String;@1d4c61c) PASSED: InValidPasswordTest([Ljava.lang.String;@116471f) =============================================== com.mkyong.regex.PasswordValidatorTest Tests run: 2, Failures: 0, Skips: 0 =============================================== =============================================== mkyong Total tests run: 2, Failures: 0, Skips: 0 ===============================================
lien://étiquette/mot de passe/[mot de passe]lien://étiquette/regex/[regex]