How to validate password with regular expression - Regular Expression සමග මුරපදය තහවුරු කරන්නේ කෙසේද?

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$

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

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

Previous
Next Post »