암호 복잡 도 정규, 적어도 대문자, 소문 자, 숫자, 특수 기호 포함
3127 단어 정규 및 상용 도구
2. 방안: 정규 표현 식 을 이용 하여 검증 합 니 다.
3. 사고방식: 배제 법
1. 대문자, 소문 자, 숫자, 특수 기호 중 1 가지 조합, 2 가지 조합, 3 가지 조합 을 제외 하면 4 가지 모두 포 함 된 조합 만 남 았 다.
2. 표현 식: ^ (?! [A - Za - z0 - 9] + $) (?! [a - z0 - 9 \ \ \ \ \ W] + $) (?! [A - Za - z \ \ \ \ W] + $) (?! [A - Z0 - 9 \ \ \ \ \ W] + $) [a - zA - Z0 - 9 \ \ \ \ W] {8,} $
3. 분할 해석: 그 중에서 (2) - (6) 영 폭 단언, 환 시 등 정규 기능 을 활용 했다.
(1) ^ 시작 일치
(2) (?! [A - Za - z0 - 9] + $) 뒤에 (대문자 나 소문 자 나 숫자) 가 아 닌 위치 에 일치 하 며 (대문자, 소문 자, 숫자) 의 1 종 2 종 3 종 조합 을 제외 합 니 다.
(3) (?! [a - z0 - 9 \ \ \ W] + $) 같은 이치 로 (소문 자, 숫자, 특수 기호) 의 1 가지 2 가지 조합 을 제외 합 니 다.
(4) (?! [A - Za - z \ \ W] + $) 같은 이치 로 (대문자, 소문 자, 특수 기호) 의 1 종 2 종 3 종 조합 을 제외 했다.
(5) (?! [A - Z0 - 9 \ \ W] + $) 같은 이치 로 (대문자, 배열, 특수 기호) 의 1 종 2 종 3 종 조합 을 제외 했다.
(6) [a - zA - Z0 - 9 \ \ \ W] 일치 (소문 자 나 대문자 나 숫자 또는 특수 기호) 위의 조합 을 제외 하기 때문에 4 가지 모두 포 함 된 조합 만 남 았 다.
(7) {8,} 8 자리 이상
(8) $일치 하 는 문자열 의 끝
public class RegexTest {
// , ,
public static final String PW_PATTERN = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,}$";
// , ,
public static final String PW_PATTERN2 = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Z\\W]+$)[a-zA-Z0-9\\W]{8,}$";
public static void main(String[] args) {
String pw1 = "ABCDEFGHIG";
String pw2 = "abcdefghig";
String pw3 = "0123456789";
String pw4 = "!@#$%^&*()";
String pw5 = "ABCDEabcde";
String pw6 = "ABCDE01234";
String pw7 = "ABCDE!@#$%";
String pw8 = "abcde01234";
String pw9 = "abcde!@#$%";
String pw10 = "01234!@#$%";
String pw11 = "abcde01234!@#$%";
String pw12 = "ABCDE01234!@#$%";
String pw13 = "ABCDEabcde!@#$%";
String pw14 = "ABCDEabcde01234";
String pw15 = "Aa0!";
//
String pw16="ABCabc012!@#";
System.out.println(pw1.matches(PW_PATTERN));
System.out.println(pw2.matches(PW_PATTERN));
System.out.println(pw3.matches(PW_PATTERN));
System.out.println(pw4.matches(PW_PATTERN));
System.out.println(pw5.matches(PW_PATTERN));
System.out.println(pw6.matches(PW_PATTERN));
System.out.println(pw7.matches(PW_PATTERN));
System.out.println(pw8.matches(PW_PATTERN));
System.out.println(pw9.matches(PW_PATTERN));
System.out.println(pw10.matches(PW_PATTERN));
System.out.println(pw11.matches(PW_PATTERN));
System.out.println(pw12.matches(PW_PATTERN));
System.out.println(pw13.matches(PW_PATTERN));
System.out.println(pw14.matches(PW_PATTERN));
System.out.println(pw15.matches(PW_PATTERN));
System.out.println(pw16.matches(PW_PATTERN));
}
}
출력 결 과 는 마지막 줄 을 제외 하고 모두 false 입 니 다. 즉, 마지막 비밀번호 만 요구 에 부합 합 니 다.