This example shows how to validate a Date string in Java using regular expression with Regex Pattern and Matcher validation.
Date Format: dd/mm/yyyy
Regular Expression Pattern: (0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)
The above regular expression is used to validate the date format in “dd/mm/yyyy”, you can easy customize to suit your need. However, it’s a bit hard to validate the leap year, 30 or 31 days of a month, we may need basic logic as below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import java.util.regex.Matcher; import java.util.regex.Pattern; public class DateValidator { private Pattern pattern; private Matcher matcher; private static final String DATE_PATTERN = "(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)"; public DateValidator() { pattern = Pattern.compile(DATE_PATTERN); } /** * Validate date format with regular expression * @param date date address for validation * @return true valid date fromat, false invalid date format */ public boolean validate(final String date) { matcher = pattern.matcher(date); if (matcher.matches()) { matcher.reset(); if (matcher.find()) { String day = matcher.group(1); String month = matcher.group(2); int year = Integer.parseInt(matcher.group(3)); if (day.equals("31") && (month.equals("4") || month.equals("6") || month.equals("9") || month.equals("11") || month.equals("04") || month.equals("06") || month.equals("09"))) { return false; // only 1,3,5,7,8,10,12 has 31 days } else if (month.equals("2") || month.equals("02")) { //leap year if (year % 4 == 0) { if (day.equals("30") || day.equals("31")) { return false; } else { return true; } } else { if (day.equals("29") || day.equals("30") || day.equals("31")) { return false; } else { return true; } } } else { return true; } } else { return false; } } else { return false; } } } |