正则表达式校验yyyymmdd

正则表达式为

([\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))))|((((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9])))))

处理代码如下:

private static final Pattern date_pattern = Pattern.compile("([\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))))|((((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9])))))");

//假如是1988年5月8日这种,补足8位数字,变成1988年05月08日

String cur_mm = null;
String cur_dd = null;
if(cur_value.contains("年")){
cur_mm = cur_value.substring(cur_value.indexOf("年")+1,cur_value.indexOf("月"));
if(cur_mm!=null&&cur_mm.trim().length()==1){
cur_value = cur_value.substring(0,cur_value.indexOf("年")+1)+"0"+cur_value.substring(cur_value.indexOf("年")+1,cur_value.length());
}
cur_dd = cur_value.substring(cur_value.indexOf("月")+1,cur_value.indexOf("日"));
if(cur_dd!=null&&cur_dd.trim().length()==1){
cur_value = cur_value.substring(0,cur_value.indexOf("月")+1)+"0"+cur_value.substring(cur_value.indexOf("月")+1,cur_value.length());
}

}
Matcher date_match = date_pattern.matcher(cur_value.replace("年", "").replace("月", "").replace("日", "").replace("-", ""));
if (date_match.find()) {
date_result = date_match.group(0).trim();
return date_result.replace(",", "").trim();
}

////date_pattern针对XXXX0410,XXXX0610,XXXX0910,XXXX1110这4个日期无效,需做特殊处理
boolean mmFlag = cur_value.indexOf("04")!=-1||cur_value.indexOf("06")!=-1||cur_value.indexOf("09")!=-1||cur_value.indexOf("11")!=-1;
if(mmFlag && cur_value.indexOf("10")!=-1){
return cur_value.replace("年", "").replace("月", "").replace("日", "").replace("-", "");
}

原文地址:https://www.cnblogs.com/ximencuixue/p/9316449.html