Password Regular Expression Pattern
((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})
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
?= – means apply the assertion condition, meaningless by itself, always work with other combination
Whole combination is means, 6 to 20 characters string with at least one digit, one upper case letter, one lower case letter and one special symbol (“@#$%”). This regular expression pattern is very useful to implement a strong and complex password.
P.S The grouping formula order is doesn’t matter.
1. Java Regular Expression Example
PasswordValidator.java
package com.javaSchool.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. Password that match:
1. javaSchool1A@
2. mkYOn12$
2. mkYOn12$
3. Password that doesn’t match:
1. mY1A@ , too short, minimum 6 characters
2. javaSchool12@ , uppercase characters is required
3. javaSchool12* , special symbol “*” is not allow here
4. javaSchool$$, digit is required
5. javaSchool12$ , lower case character is required
2. javaSchool12@ , uppercase characters is required
3. javaSchool12* , special symbol “*” is not allow here
4. javaSchool$$, digit is required
5. javaSchool12$ , lower case character is required
4. Unit Test – PasswordValidator
PasswordValidatorTest.java
package com.javaSchool.regex; import org.testng.Assert; import org.testng.annotations.*; /** * Password validator Testing * @author javaSchool * */ public class PasswordValidatorTest { private PasswordValidator passwordValidator; @BeforeClass public void initData(){ passwordValidator = new PasswordValidator(); } @DataProvider public Object[][] ValidPasswordProvider() { return new Object[][]{ {new String[] { "javaSchool1A@", "mkYOn12$", }} }; } @DataProvider public Object[][] InvalidPasswordProvider() { return new Object[][]{ {new String[] { "mY1A@","javaSchool12@","javaSchool12*", "javaSchool$$","javaSchool12$" }} }; } @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. Unit Test – Result
Password is valid : javaSchool1A@ , true Password is valid : mkYOn12$ , true Password is valid : mY1A@ , false Password is valid : javaSchool12@ , false Password is valid : javaSchool12* , false Password is valid : javaSchool$$ , false Password is valid : javaSchool12$ , false PASSED: ValidPasswordTest([Ljava.lang.String;@1d4c61c) PASSED: InValidPasswordTest([Ljava.lang.String;@116471f) =============================================== com.javaSchool.regex.PasswordValidatorTest Tests run: 2, Failures: 0, Skips: 0 =============================================== =============================================== javaSchool Total tests run: 2, Failures: 0, Skips: 0 ===============================================
Sign up here with your email
ConversionConversion EmoticonEmoticon