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변수는 정상으로 출력됩니다.