본문 바로가기

Java

문자열 패턴 분석 정규식

비밀번호 패턴을 읽어 숫자 알파벳 대소문자 특수 문자를 사용했는지 분석하기 위한 소스가 필요했다. 기존에 만들어 저있는 것은 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