Как проверить пароль с помощью регулярного выражения

Шаблон регулярного выражения пароля

((?=.** \d)(?=.** [a-z])(?=.** [A-Z])(?=.** [@#$%]).{6,20})

Описание

(           # 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

? = - означает применить условие утверждения, само по себе бессмысленное, всегда работать с другой комбинацией

Целая комбинация - это среднее от 6 до 20 символов, по крайней мере, с одной цифрой, одной заглавной буквой, одной строчной буквой и одним специальным символом («@ # $%»). Этот шаблон регулярных выражений очень полезен для реализации надежного и сложного пароля.

P.S Порядок формулы группировки не имеет значения.

1. Пример регулярного выражения 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. Пароль, который соответствует:

{Пусто} 1. mkyong1A @ 2. mkYOn12 $

3. Не совпадает пароль:

{Пусто} 1. mY1A @, слишком короткий, минимум 6 символов 2. mkyong12 @, требуются заглавные буквы 3. mkyoNg12 , специальный символ « » здесь не разрешен 4. mkyonG $$, требуется цифра 5. MKYONG12 $, символ нижнего регистра требуется

4. Модульный тест - PasswordValidator

Модульное тестирование с 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. Модульный тест - результат

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
===============================================

ссылка://тег/пароль/[пароль]ссылка://тег/регулярное выражение/[регулярное выражение]