Шаблон регулярного выражения пароля
((?=.** \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
===============================================
ссылка://тег/пароль/[пароль]ссылка://тег/регулярное выражение/[регулярное выражение]