Comment valider un mot de passe avec une expression régulière

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]