Searching...
Wednesday, 19 September 2012

Java Regex Date Validation Example

02:25

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;

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();
}
}
Output

input :  1/1/2012   true
input : 32/13/2010 false
 

0 comments: