Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 정규식으로 MM-DD-YYYY 날짜 형식 유효성 검사하는 방법

Java의 java.util.regex 패키지는 문자 시퀀스에서 특정 패턴을 찾기 위한 다양한 클래스를 제공합니다.

이 패키지의 Pattern 클래스는 정규 표현식(regular expression)이 컴파일된 표현체입니다. 문자열과 정규 표현식을 매칭하기 위해 이 클래스는 다음 두 가지 메서드를 제공합니다.

  • compile() – 정규 표현식을 나타내는 문자열을 인자로 받아 Pattern 객체를 반환합니다.

  • matcher() – 문자열 값을 인자로 받아, 해당 문자열과 현재 Pattern 객체가 나타내는 패턴을 비교하는 Matcher 객체를 생성합니다.

MM-DD-YYYY 형식(월-일-연도)의 날짜와 일치시키기 위한 정규 표현식은 다음과 같습니다.

^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$

이 정규 표현식의 각 구성 요소를 살펴보면 다음과 같습니다.

  • (1[0-2]|0[1-9]) – 01부터 12까지의 월(MM)을 의미합니다.

  • (3[01]|[12][0-9]|0[1-9]) – 01부터 31까지의 일(DD)을 의미합니다.

  • [0-9]{4} – 네 자리 숫자로 이루어진 연도(YYYY)를 의미합니다.

따라서 MM-DD-YYYY 형식의 날짜 문자열 유효성을 검사하려면 다음 단계를 수행합니다.

  • Pattern 클래스의 compile() 메서드를 사용해 위 정규 표현식을 컴파일하고 Pattern 객체를 얻습니다.

  • 앞서 얻은 객체에서 matcher() 메서드를 호출하면서 검사할 날짜 문자열을 인자로 전달하고, 그 결과로 Matcher 객체를 얻습니다.

  • Matcher 클래스의 matches() 메서드는 문자열이 패턴과 일치하면 true를, 그렇지 않으면 false를 반환합니다. 앞 단계에서 얻은 Matcher 객체에 대해 이 메서드를 호출하면 됩니다.

예제 코드

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatchingDate {
    public static void main(String[] args) {
        String date = "01/12/2019";
        String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
        // Pattern 객체 생성
        Pattern pattern = Pattern.compile(regex);
        // 컴파일된 패턴을 문자열과 매칭
        Matcher matcher = pattern.matcher(date);
        boolean bool = matcher.matches();
        if(bool) {
            System.out.println("날짜가 유효합니다");
        } else {
            System.out.println("날짜가 유효하지 않습니다");
        }
    }
}

실행 결과

날짜가 유효합니다

추가 참고 사항

위 정규 표현식은 날짜의 형식만 검사하며, 실제로 존재하는 날짜인지까지는 확인하지 않습니다. 예를 들어 '02/31/2019'처럼 존재하지 않는 날짜도 형식상으로는 통과됩니다. 달력상 실제로 유효한 날짜까지 검증하려면 java.time.LocalDateSimpleDateFormat을 함께 활용하는 것이 좋습니다.