비밀번호 패턴을 읽어 숫자 알파벳 대소문자 특수 문자를 사용했는지 분석하기 위한 소스가 필요했다. 기존에 만들어 저있는 것은 1바이트씩 비교해서 만든 것이라 좀 더 눈에 잘 들어오게 만들어보기위해 요즘 정규식을 이용해보고 있다.
Pattern, Matcher 클래스를 이용하니까 간단하게 되서 참 편하다.
먼저 알파벳, 숫자, 특수문자를 구분하는 함수를 만들어보자.
public static boolean isAlnumPunct(String str){
boolean bResult = false;
Pattern pt = Pattern.compile("[\\p{Alnum}\\p{Punct}]{1,}");
Matcher mc = pt.matcher(str);
if(mc.matches()){
bResult = true;
}
return bResult;
}
\p{Alnum}는 알파벳과 숫자를 나타내는 패턴이고 \p{Punct}는 특수문자를 나타내는 패턴이다. {1,}은 적어도 1번 이상 나와야 한다는 뜻으로, [\\p{Alnum}\\p{Punct}]{1,} 패턴은 알파벳, 숫자, 특수문자 중에 1자 이상 있어야한다는 뜻이 된다. punct는 punctuation으로 구두법이라는 뜻이다. 글을 쓸 때 문장 부호를 쓰는 법이 이란다.
여기서 비교구분을 내가 만들본 것과 비교해보자
String pattern = "^[0-9a-zA-Z/`~!_@#$%<>,.;:-=&\\^\\[\\]\\{\\}[*][+][|][?]]+$";
boolean check = Pattern.matches(pattern, str);
일일히 범위를 지정해야하고 가능한 특수문자를 넣어줘야한다. 앞으로 간단하게 사용해야겠다. 다음은 문자열중에 특정 문자가 포함되어있는지 검사하려고 만든 패턴이다.
String patternNumber = "(.*)[0-9](.*)";
String patternAlpha = "(.*)[a-zA-Z](.*)";
String patternSp = "(.*)[/`~!_@#$%()<>,.;:-=&\\^\\[\\]\\{\\}[*][+][|][?]](.*)";
String patternBlank = "(.*)[\\s](.*)";
String patternHangul = "(.*)[ㄱ-ㅎㅏ-ㅣ가-힣](.*)";
boolean checkNum = Pattern.matches(patternNumber, str);
boolean checkAlpha = Pattern.matches(patternAlpha, str);
boolean checkSp = Pattern.matches(patternSp, str);
boolean checkBlank = Pattern.matches(patternBlank, str);
boolean checkHangul = Pattern.matches(patternHangul, str);
차례대로 숫자, 알파벳, 특수문자, 공백, 한글이 문자열에 포함되는지 알아보기 위한 패턴이다.
그리고 숫자 4개가 붙어있지 검사하는 패턴도 만들어보았다.
Pattern pt = Pattern.compile("(.*)[\\p{Digit}]{4}(.*)");
참고 자료
http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
http://blog.daum.net/dok9red/6
'Java' 카테고리의 다른 글
captcha를 만들어보자 (0) | 2015.04.29 |
---|---|
java.security.InvalidKeyException: Illegal key size 오류 (0) | 2015.04.28 |
hadoop - 하둡(Hadoop)이란 무엇인가? (0) | 2012.10.05 |
자바 7 보안 패치 (0) | 2012.08.31 |
자바 제로데이 취약점 공격 (0) | 2012.08.01 |