안녕하세요. 제임스 입니다.
이번에는 정규표현식을 이용하여 암호 설정을 위한 표현식을 만들어 보겠습니다.
■ 정규표현식으로 암호 패턴 만들기
암호 규칙을 아래와 같이 순차적으로 만들어 보겠습니다.
▶ 숫자 최소 1자 포함
▶ 영문대문자 최소 1자 이상 포함
▶ 영문소문자 최소 1자 이상 포함
▶ 최소 8자 ~ 최대 20자 허용
위 조건을 만족하는 암호 체크 표현식을 만들어 보겠습니다.
1 | String regExp = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,20}$"; | cs |
위와 같이 표현식을 하나 작성했습니다.
(?=.*[0-9])
0 ~ 9 까지 숫자 최소 한개를 의미
(?=.*[a-z])
영문소문자 a ~ z 까지의 문자 최소 한개
(?=.*[A-Z])
영문대문자 A ~ Z 까지의 문자 최소 한개
.{8, 20}
선행 세가지 표현식 (숫자, 영문소문자, 영문대문자)에 맞는 8 ~ 20 자리 문자열
우선 위 표현식이 정상 동작하는지 여부 테스트 해봐야 겠죠?
1 2 | String input1 = "abc123"; System.out.println("input1 정규표현식 적용 결과 ==> "+input1.matches(regExp)); | cs |
우선 길이가 6인 문자열을 테스트 해봤습니다.
영문소문자와 숫자는 들어가 있지만 대문자가 빠져 있으니 테스트 결과는 예상 가능합니다.
Result
input1 정규표현식 적용 결과 ==> false
1 2 | String input2 = "abcd1234"; System.out.println("input2 정규표현식 적용 결과 ==> "+input2.matches(regExp)); | cs |
테스트 문자열의 길이는 8자리로 최소한의 길이 조건은 맞지만...
영문대문자가 없습니다. 결과는 아래와 같습니다.
Result
input2 정규표현식 적용 결과 ==> false
1 2 | String input3 = "abcd1234B"; System.out.println("input3 정규표현식 적용 결과 ==> "+input3.matches(regExp)); | cs |
테스트 문자열의 길이는 9로 조건 만족,
영문 대소문자 모두 포함하고 있으며 숫자도 포함하고 있습니다.
모든 조건을 만족합니다. 결과는 아래와 같습니다.
Result
input3 정규표현식 적용 결과 ==> true
이제 몇 가지 조건을 더 추가해 보겠습니다.
▶ 특수문자 필수 입력
▶ 공백문자 허용안함
위와 같은 추가 조건을 더 입력해 보겠습니다.
1 | String regExp = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\\W)(?=\\S+$).{8,20}$"; | cs |
기존 표현식에
(?=.*\\W)
특수문자 최소 한개 입력
(?=\\S+$)
공백문자는 허용하지 않고, 공백문자가 허용되지 않는 형태를 1회 이상 일치 시킴 (즉, 공백문자는 처음부터 끝까지 허용하지 않음)
위와 같이 두가지 표현식 그룹을 추가 했습니다.
잘 동작하는 지 테스트 해보겠습니다.
1 2 | String input1 = "abc123"; System.out.println("input1 정규표현식 적용 결과 ==> "+input1.matches(regExp)); | cs |
6자리 문자열입니다. 당연히 false 가 리턴 됩니다.
Result
input1 정규표현식 적용 결과 ==> false
1 2 | String input2 = "abcd1234"; System.out.println("input2 정규표현식 적용 결과 ==> "+input2.matches(regExp)); | cs |
8자리 문자열이지만 영문소문자 와 숫자만 있습니다.
조건을 만족하지 않죠!
Result
input2 정규표현식 적용 결과 ==> false
1 2 | String input3 = "abcd1234!"; System.out.println("input3 정규표현식 적용 결과 ==> "+input3.matches(regExp)); | cs |
자릿수 조건 충족 & 영문소문자 & 숫자 & 특문 컨디션이지만 영문대문자가 빠졌습니다.
Result
input3 정규표현식 적용 결과 ==> false
1 2 | String input4 = "abcd0!@!B"; System.out.println("input4 정규표현식 적용 결과 ==> "+input4.matches(regExp)); | cs |
자릿수 만족 & 영문소문자 & 영문대문자 & 특문 & 숫자 등 모든 조건을 만족 했습니다.
문자열 내에 공백문자도 없습니다.
제대로 조건을 만족 했습니다.
Result
input4 정규표현식 적용 결과 ==> true
1 2 | String input5 = "abcd0 !@!B"; System.out.println("input5 정규표현식 적용 결과 ==> "+input5.matches(regExp)); | cs |
바로 위 문자열 중간에 공백문자를 추가 했습니다.
당연히 false 가 리턴 됩니다.
Result
input5 정규표현식 적용 결과 ==> false
일반적으로 많이 사용하고 있는 비밀번호 패턴을 정규표현식을 이용하여 작성해봤습니다.
상황에 맞게 잘 수정해서 사용 하시길 바라겠습니다.
▼ 도움이 되셨다면 로그인이 필요 없는 ▼
▼ 하트 클릭 한번 부탁 드립니다 ▼
감사합니다 :D
'Java' 카테고리의 다른 글
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 휴대폰 번호 패턴 만들기 (1184) | 2018.06.26 |
---|---|
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 이메일 주소 패턴 만들기 (471) | 2018.06.22 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 한글만 허용 (12) | 2018.06.20 |
[ 자바 코딩 ] Java Regular Expression 정규표현식 - 이중 파일 확장자 처리 (12) | 2018.06.19 |
[ 자바 코딩 ] Regular Expression 정규표현식 - 파일 확장자 (9) | 2018.06.15 |