Language/Java

[JAVA] 정규표현식 개념과 예제(회원가입, 결제, 본인인증 입력값 검사기 예제)

Chung-A 2021. 2. 6. 22:41

1. 정규표현식 개념

표현식 설명
^ 문자열의 시작
$ 문자열의 종료
. 임의의 한 문자
(필수 입력이며 문자의 종류는 가리지 않음, 역슬래시(\)는 넣을수 없다)
* 앞의 문자가 없을수도, 무한히 많을 수 있음
+ 앞 문자가 하나 이상 존재함
? 앞 문자가 없거나 하나 있음
[] 문자의 집합이나 범위를 나타내고 두 문자 사이는 -기호로 범위를 나타냄.
[]내에서 ^가 앞에 존재하면 not 을 의미함

ex) [0-9] 는 0~9 사이의 문자를 나타냄
{} 횟수, 또는 범위를 나타냄
() 소괄호 안의 문자를 하나의 문자로 인식
| 패턴 안에서 or 연산을 수행할 때 사용
\s 공백 문자
\S 공백 문자가 아닌 나머지 문자 
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d 숫자 [0-9]와 동일
\D 숫자를 제외한 모든 문자
\  정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미
(?i)   앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

 

 

2. 정규표현식 적용 예제

실무에서 사용할법한 예제들입니다.

회원가입에 사용되는 정규식부터 본인인증, 결제 등 다양한 곳에서 활용 가능합니다. 

    // 숫자 검사기
    public boolean isNumeric(String str) {
        return Pattern.matches("^[0-9]*$", str);
    }

    // 영어 검사기
    public boolean isAlpha(String str) {
        return Pattern.matches("^[a-zA-Z]*$", str);
    }

    // 한국어 혹은 영어 검사기
    public boolean isAlphaNumeric(String str) {
        return Pattern.matches("[a-zA-Z0-9]*$", str);
    }

    // 한국어 검사기
    public boolean isKorean(String str) {
        return Pattern.matches(".*[ㄱ-ㅎㅏ-ㅣ가-힣0-9!?()]+.*", str.replace("\n",""));
    }

    // 대문자 검사기
    public boolean isUpper(String str) {
        return Pattern.matches("^[A-Z]*$", str);
    }

    // 소문자 검사기
    public boolean isDowner(String str) {
        return Pattern.matches("^[a-z]*$", str);
    }

    // 이메일 검사기
    public boolean isEmail(String str) {
        return Pattern.matches("^[a-z0-9A-Z._-]*@[a-z0-9A-Z]*.[a-zA-Z.]*$", str);
    }

    // URL 검사기 (Http, Https 제외)
    public boolean isURL(String str) {
        return Pattern.matches("^[^((http(s?))\\:\\/\\/)]([0-9a-zA-Z\\-]+\\.)+[a-zA-Z]{2,6}(\\:[0-9]+)?(\\/\\S*)?$",
                str);
    }

    // phone number checker
    // xxx-xxx-xxxx (형식만 비교)
    // - 은 없어야 함.
    public boolean isMob(String str) {
        return Pattern.matches("^\\d{2,3}\\d{3,4}\\d{4}$", str);
    }

    // 일반 전화 검사기
    public boolean isPhone(String str) {
        return Pattern.matches("^\\d{2,3}\\d{3,4}\\d{4}$", str);
    }

    // IP 검사기
    public boolean isIp(String str) {
        return Pattern.matches("([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})", str);
    }

    // 우편번호 검사기
    public boolean isPost(String str) {
        return Pattern.matches("^\\d{3}\\d{2}$", str);
    }

    // 주민등록번호 검사기
    public boolean isPersonalID(String str) {
        return Pattern.matches("^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$", str);
    }

	// 한자를 포함하고 있는지 여부
    public boolean containsChineseCharacters(String str){
        String regEx = ".*[\u2e80-\u2eff\u31c0-\u31ef\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fbf\uf900-\ufaff].*";
        return str.matches(regEx);
    }

    // 신용 카드 양식(xxxx-xxxx-xxxx-xxxx)
    public boolean isCreditCard(String cardNumber) {
        return Pattern.matches("((5[1-5]\\d{14})|(4\\d{12}(\\d{3})?)|(3[47]\\d{13})|(6011\\d{12})|((30[0-5]|3[68]\\d)\\d{11}))", cardNumber);
    }

    // 신용카드 유효기간 양식
    public boolean isExpireDate(String expireDate) {
        return Pattern.matches("[0-9]{2}(?:0[1-9]|1[0-2])", expireDate);
    }