728x90
정규표현식 자체만으로도 정말 많은 이야기를 할 수 있지만.
기본적인 정규표현식의 개념과 언제 사용하면 좋은지에 대해서는 어느정도 알고 있다고 가정한다.
(나중에 기회가 된다면 정규표현식에 대해서 정리를 할 계획인다.)
자바에서 정규표현식을 사용하기 위해서는 두 개의 라이브러리를 import해야 한다.
import java.util.regexp.Matcher;
import java.util.regexp.Pattern;
바로 util package에 있는 클래스 이다.
두 개의 클래스를 import 했다면, 다음처럼 작성해보자.
// 비밀번호 유효성 검사식1 : 숫자, 특수문자가 포함되어야 한다.
String regExp_symbol = "([0-9].*[!,@,#,^,&,*,(,)])|([!,@,#,^,&,*,(,)].*[0-9])";
// 비밀번호 유효성 검사식2 : 영문자 대소문자가 적어도 하나씩은 포함되어야 한다.
String regExp_alpha = "([a-z].*[A-Z])|([A-Z].*[a-z])";
// 정규표현식 컴파일
Pattern pattern_symbol = Pattern.compile(regExp_symbol);
Pattern pattern_alpha = Pattern.compile(regExp_alpha);
// 문자 매칭
Matcher matcher_symbol = pattern_symbol.matcher("검사할문자열");
Matcher matcher_alpha = pattern_alpha.matcher("검사할문자열");
// 매칭 결과 출력
System.out.println("matcher_symbol : " + matcher_symbol.find());
System.out.println("matcher_alpha : " + matcher_alpha.find());
비밀번호 작성 규칙은 다음과 같다.
1. 숫자가 포함되어야 한다.
2. 특수문자가 포함되어야 한다.
3. 영문 소문자가 포함되어야 한다.
4. 영문 대문자가 포함되어야 한다.
실제로 사용할 때 수정해야 할 부분이 있다면 다음과 같다.
1. 2라인과 4라인에서 정의한 정규표현식을 수정하여 유효성 검사 조건을 달리 한다.
2. 11라인과 12라인에서 "검사할문자열"에 들어갈 부분에 진짜 검사할 신규 비밀번호 매개변수를 담아 넣어준다.
3. 15라인과 16라인에서 단순히 console에 출력한 부분을 .find()의 리턴타입이 boolean이므로 if절 안에 넣어 수정 가능 여부를 판별한다.
자바에서 정규표현식을 사용하여 유효성을 검사하는 방법이 위와 같으므로 응용하는건 개발자의 몫이다.
마지막으로 그냥 이렇게 끝내면 작동하지 않는 것을 첨부한 것 같아서,
사용자로부터 입력 받는것은 아니지만, 배열에 임의의 암호값을 넣어보고 실행해본 소스와 결과를 첨부한다.
package xxxelppa.tistory.com;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExpTest {
public static void main(String[] ar) {
String arrPw[] = new String[] {"qwer1234", "Qwer1234", "qwer!234", "Qwer!234"};
// 비밀번호 유효성 검사식1 : 숫자, 특수문자가 포함되어야 한다.
String regExp_symbol = "([0-9].*[!,@,#,^,&,*,(,)])|([!,@,#,^,&,*,(,)].*[0-9])";
// 비밀번호 유효성 검사식2 : 영문자 대소문자가 적어도 하나씩은 포함되어야 한다.
String regExp_alpha = "([a-z].*[A-Z])|([A-Z].*[a-z])";
// 정규표현식 컴파일
Pattern pattern_symbol = Pattern.compile(regExp_symbol);
Pattern pattern_alpha = Pattern.compile(regExp_alpha);
for(int i = 0; i < arrPw.length; ++i) {
// 문자 매칭
Matcher matcher_symbol = pattern_symbol.matcher(arrPw[i]);
Matcher matcher_alpha = pattern_alpha.matcher(arrPw[i]);
// 매칭 결과 출력
System.out.println("========== " + (i+1) + "번째 비밀번호 : [" + arrPw[i] + "] ==========");
if(matcher_symbol.find() && matcher_alpha.find()) {
System.out.println("비밀번호로 적절합니다.");
} else {
System.out.println("비밀번호로 부적절합니다.");
}
System.out.println();
}
}
}
========== 1번째 비밀번호 : [qwer1234] ========== 비밀번호로 부적절합니다. ========== 2번째 비밀번호 : [Qwer1234] ========== 비밀번호로 부적절합니다. ========== 3번째 비밀번호 : [qwer!234] ========== 비밀번호로 부적절합니다. ========== 4번째 비밀번호 : [Qwer!234] ========== 비밀번호로 적절합니다. |
728x90
'프로그래밍 언어 > Java' 카테고리의 다른 글
java 환경변수 설정 방법과 이유 (0) | 2017.06.08 |
---|---|
String vs. StringBuilder vs. StringBuffer 예제를 통한 비교 (0) | 2017.06.07 |
javaFX MDI(Multi Document Interface) 답답해서 정리 (0) | 2017.06.05 |
자바 @어노테이션 정리 2편 (0) | 2017.06.03 |
자바 @어노테이션 정리 1편 (0) | 2017.06.02 |