title :使用正则表达式校验时间,精确到秒,包括年月日时分秒,14位格式精确校验,正则表达式精确校验时间
今天做项目的时候遇到了校验日期的需求;
要求:精确校验14位的时间格式:yyyyMMddHHmmss,e.g.:20161213232255
要求时间绝对存在,举几个不存在的例子.1月32号,2月30日,24时,4点60分,等等。
说白了就是时间绝对存在而且考虑到平年2月28天,闰年2月29天等等。
为了综合考虑各种格式的时间,我做了以下精确分解,综合考虑:
part_1:时间格式:yyyyMMddHHmmss.例如:20161213232255
正则表达式为:
String timeRegex = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$";
测试代码:
public void test() {
// 不带‘-’或‘:’或‘ ’
// 不能带杠,冒号,空格,而且必须14位:e.g : 20161213164858是合法的;
// 这个是超级精确的校验
String timeRegex = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$";
boolean b_2 = Pattern.matches(timeRegex, "20200229164859");
System.out.println("timeRex : mathcesl : " + b_2);
}
part_2:精确到日即可,即年月日,格式:yyyyMMdd,例如:20161213
正则表达式为:
String yyyyMMdd_Regex_2 = "^((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12]