Java Regex Date Validation Example
Date Regex Pattern
(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)
( | start of group =1 |
0?[1-9] | 01-09 or 1-9 |
| | ..or |
[12][0-9] | 10-19 or 20-29 |
| | ..or |
3[01] | 30, 31 |
) | end of group =1 |
/ | follow by a "/" |
( | start of group =2 |
0?[1-9] | 01-09 or 1-9 |
| | ..or |
1[012] | 10,11,12 |
) | end of group =2 |
/ | follow by a "/" |
( | start of group =3 |
(19|20)\\d\\d | 19[0-9][0-9] or 20[0-9][0-9] |
) | end of group =3 |
Example
package mycollectiontest;Output
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
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 RegexExample() {
pattern = Pattern.compile(DATE_PATTERN);
String input = "1/1/2012";
System.out.println("input : " + input + " " + validate(input));
String input1 = "32/13/2010";
System.out.println("input : " + input1 + " " + validate(input1));
}
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;
}
}
public static void main(String[] args) {
new RegexExample();
}
}
input : 1/1/2012 true
input : 32/13/2010 false
No comments:
Post a Comment