More

java에서 패스워드 자릿수,영문,특수문자 정규식으로 검증하기

java에서 패스워드를 받아 8자리 이상 16자리 이하인지 검증하고 패스워드에 영문자,숫자,특수문자가 각 1개씩 들어가야 하는 조건을 테스트 하는 코드입니다. 정규식을 사용하여 입력받은 패스워드를 검증합니다.


테스트 소스코드

-아래 소스코드에서 password 1~4 변수 내용 중 첫번째 변수를 제외한 나머지는 글자수를 빼먹거나 영문,특수문자를 빼먹고 실행하여 테스트 해봤습니다. 소스코드 정규식에 대한 내용은 아래와 같습니다.

  • ^ : 문자열의 시작
  • (?=.*[0-9]) : 숫자가 하나 이상 포함되어 있는지 검사
  • (?=.*[a-zA-Z]) : 영문자가 하나 이상 포함되어 있는지 검사
  • (?=.*[@#$%^&+=_!]) : 특수문자가 하나 이상 포함되어 있는지 검사
  • (?=\S+$) : 공백이 없는지 검사
  • .{8,16} : 문자열이 8자 이상 16자 이하인지 검사
  • $ : 문자열의 끝

public class MyClass {
    public static void main(String args[]) {
        String password = "345678a!"; // 정상
        String password1 = "45678a!"; // 글자수 부족
        String password2 = "3456789!"; // 영문 빼먹음
        String password3 = "3456789a"; // 특수문자 빼먹음

        if(password.matches("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[@#$%^&+=_!])(?=\\S+$).{8,16}$")){
            System.out.println("유효한 패스워드입니다.");
        }else{
            System.out.println("유효하지 않은 패스워드입니다.");
        }
        
        if(password1.matches("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[@#$%^&+=_!])(?=\\S+$).{8,16}$")){
            System.out.println("유효한 패스워드입니다.");
        }else{
            System.out.println("글자수가 부족합니다.");
        }
        
        if(password2.matches("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[@#$%^&+=_!])(?=\\S+$).{8,16}$")){
            System.out.println("유효한 패스워드입니다.");
        }else{
            System.out.println("영문이 빠졌습니다.");
        }
        
        if(password3.matches("^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[@#$%^&+=_!])(?=\\S+$).{8,16}$")){
            System.out.println("유효한 패스워드입니다.");
        }else{
            System.out.println("특수문자가 빠졌습니다.");
        }
        
    }
}


출력결과

테스트 결과. 하나씩 빼먹은 1,2,3을 제외한 첫번째 password변수는 정상으로 출력됩니다.

password-검사