I am able to identify date (mm/dd/yyyy) in a String using Java regex pattern. When I give correct date like 12/08/1947 I get 12 as month but when I put wrong date like 15/08/1947 in mm/dd/yyyy format I am getting 5 as month. Is there any way to identify wrong date?
package com.test.package;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DateIdentifier {
private static final String REGEX_PATTERN = "(0?[1-9]|1[012])/(0?[1-9]|[12][0-9]|3[01])/((19|20)\\d\\d)";
private static final String STR_DATA = " 99238 128.00 77.51 15/21/2017 1/01/2017 0.00 0.00 0.00 0.00 50.49 OMR/45 77.51";
public static void main(String[] args) throws FileNotFoundException, ParseException {
DateIdentifier dateIdentifier = new DateIdentifier();
System.out.println(dateIdentifier.getDates(STR_DATA));
}
private boolean getDates(String strData){
int count = 0;
boolean flag = false;
Matcher matcher = Pattern.compile(REGEX_PATTERN).matcher(strData);
while(matcher.find()){
String month = matcher.group(1);
String day = matcher.group(2);
int year = Integer.parseInt(matcher.group(3));
if(Integer.parseInt(day)<=31 && !(Integer.parseInt(month)>13)){
count +=1;
System.out.println("day: " +day);
System.out.println("month: " +month);
}
}
if(count>=2){
flag = true;
}
return flag;
}
}