날짜 형식 검증은 사용자 입력을 처리할 때 자주 필요한 작업입니다. Java에서는 정규식(Regular Expression)을 활용하면 간단하게 날짜 문자열이 올바른 형식인지 확인할 수 있습니다.
다음 정규식은 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]): 월(Month) — 01부터 12까지의 두 자리 숫자만 허용합니다.(3[01]|[12][0-9]|0[1-9]): 일(Day) — 01부터 31까지의 두 자리 숫자만 허용합니다.[0-9]{4}: 연도(Year) — 정확히 4자리 숫자여야 합니다.
방법 1 — Pattern과 Matcher 클래스 사용하기
문자열 내에서 해당 형식의 날짜를 검증하려면 다음 단계를 따릅니다.
Pattern 클래스의
compile()메서드로 위 정규식을 컴파일합니다.Pattern 객체의
matcher()메서드에 검증할 입력 문자열을 매개변수로 전달하여 Matcher 객체를 얻습니다.Matcher 클래스의
matches()메서드는 일치하면 true, 일치하지 않으면 false를 반환합니다. 이 메서드를 호출하여 날짜의 유효성을 확인합니다.
예제 1
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.compile(regex);
// 문자열에서 컴파일된 패턴과 일치 여부 확인
Matcher matcher = pattern.matcher(date);
boolean bool = matcher.matches();
if(bool) {
System.out.println("Date is valid");
} else {
System.out.println("Date is not valid");
}
}
}출력 결과
Date is valid
방법 2 — String 클래스의 matches() 메서드 사용하기
String 클래스의 matches() 메서드는 정규식을 인자로 받아 현재 문자열과 비교한 뒤, 일치하면 true를, 그렇지 않으면 false를 반환합니다. 따라서 주어진 날짜 문자열이 요구되는 형식과 일치하는지 확인하려면 다음과 같이 합니다.
- 검증할 날짜 문자열을 준비합니다.
- 해당 문자열에 대해
matches()메서드를 호출하고, 위의 정규식을 매개변수로 전달합니다.
예제 2
import java.util.Scanner;
public class Just {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter your name: ");
String name = sc.nextLine();
System.out.println("Enter your Date of birth: ");
String dob = sc.nextLine();
// MM-DD-YYYY 형식의 날짜를 허용하는 정규식
String regex = "^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$";
boolean result = dob.matches(regex);
if(result) {
System.out.println("Given date of birth is valid");
} else {
System.out.println("Given date of birth is not valid");
}
}
}출력 결과 1
Enter your name: Janaki Enter your Date of birth: 26/09/1989 Given date of birth is not valid
일(dd)이 앞에 오는 26/09/1989 형식은 월 범위(01~12)를 벗어나므로 유효하지 않다고 판단됩니다.
출력 결과 2
Enter your name: Janaki Enter your Date of birth: 09/26/1989 Given date of birth is valid
월이 앞에 오는 09/26/1989 형식은 정규식 조건을 모두 만족하므로 유효한 날짜로 인식됩니다.