Java正则表达式匹配一个时间格式的字符串
在使用 java 处理前端传过来的表单数据时,经常需要验证时间的格式是否有效。验证时间格式的难点在于每个月份与当月对应的天数有多种情况。比如1月份31天,但是2月份有可能是28或者29天。
验证每个月的最大天数如下:
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
以下以这样的时间格式(2018-01-3 08:02:02或者2018-1-03 08:2:2)为例,使用Java正则表达式匹配一个时间格式的字符串
/**
* 验证时间字符串格式输入是否正确
* @param timeStr
* @return
*/
private boolean valiDateTimeWithLongFormat(String timeStr) {
String format = "((19|20)[0-9]{2})-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) "
+ "([01]?[0-9]|2[0-3]):[0-5]?[0-9]:[0-5]?[0-9]";
Pattern pattern = Pattern.compile(format);
Matcher matcher = pattern.matcher(timeStr);
if (matcher.matches()) {
pattern = Pattern.compile("(\\d{4})-(\\d+)-(\\d+).*");
matcher = pattern.matcher(timeStr);
if (matcher.matches()) {
int y = Integer.valueOf(matcher.group(1));
int m = Integer.valueOf(matcher.group(2));
int d = Integer.valueOf(matcher.group(3));
if (d > 28) {
Calendar c = Calendar.getInstance();
c.set(y, m-1, 1);
int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
return (lastDay >= d);
}
}
return true;
}
return false;
}
调用示例
this.valiDateTimeWithLongFormat("2018-02-28 12:0:2"); // true
this.valiDateTimeWithLongFormat("2018-2-29 02:00:20"); // false
this.valiDateTimeWithLongFormat("2018/02/2 12:0:2"); // false
亲自试一试:Demo