Dùng java.util.regex.Pattern và Matcher để validate chuỗi ngày tháng theo format MM/DD/YYYY.
Regex pattern
^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$
Giải thích:
1[0-2]|0[1-9]– Tháng 01-123[01]|[12][0-9]|0[1-9]– Ngày 01-31[0-9]{4}– Năm 4 chữ số^...$– Khớp toàn bộ chuỗi
Ví dụ
import java.util.regex.*;
public class DateFormatValidator {
private static final Pattern DATE_PATTERN = Pattern.compile(
"^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/\\d{4}$"
);
public static boolean isValidDateFormat(String dateStr) {
if (dateStr == null) return false;
Matcher m = DATE_PATTERN.matcher(dateStr);
return m.matches();
}
public static void main(String[] args) {
String[] tests = {
"01/12/2019", "12/31/2020", "13/01/2020", // invalid month
"02/30/2020", "00/15/2020", "1/1/2020" // invalid format
};
for (String d : tests) {
System.out.printf("%-12s -> %s%n", d, isValidDateFormat(d) ? "✅ Valid" : "❌ Invalid");
}
}
}
Kết quả
01/12/2019 -> ✅ Valid
12/31/2020 -> ✅ Valid
13/01/2020 -> ❌ Invalid
02/30/2020 -> ✅ Valid (format đúng, nhưng ngày không tồn tại)
00/15/2020 -> ❌ Invalid
1/1/2020 -> ❌ Invalid (thiếu leading zero)
⚠️ Regex chỉ validate FORMAT, không validate LOGIC ngày
02/30/2020 pass regex nhưng ngày 30/2 không tồn tại. Cần parse thật để validate logic:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public static boolean isValidDateLogic(String dateStr) {
try {
LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("MM/dd/yyyy"));
return true;
} catch (DateTimeParseException e) {
return false;
}
}
Kết hợp: Regex nhanh + LocalDate chính xác
public static boolean isValidDate(String s) {
if (s == null || !DATE_PATTERN.matcher(s).matches()) return false;
try {
LocalDate.parse(s, DateTimeFormatter.ofPattern("MM/dd/yyyy"));
return true;
} catch (DateTimeParseException e) {
return false;
}
}