'java regular expression password pattern'에 해당되는 글 1건



안녕하세요. 제임스 입니다. 


이번에는 정규표현식을 이용하여 암호 설정을 위한 표현식을 만들어 보겠습니다. 


■ 정규표현식으로 암호 패턴 만들기


암호 규칙을 아래와 같이 순차적으로 만들어 보겠습니다. 



▶ 숫자 최소 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


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,