正则表达式在线验证通过但Java应用中验证失败求助
问题排查与解决
正则表达式的核心错误
你写的正则里,小时部分的分组逻辑出了问题:
原正则中([0-1]\\d)|(2[0-3])的竖线|没有被正确包裹,导致整个正则的匹配逻辑变成了两种情况:
yyyy-MM-dd 小时(后面的时分秒被忽略)小时:分:秒(前面的日期被忽略)
这就导致完整的yyyy-MM-dd HH:mm:ss格式字符串无法匹配成功。
修正后的正则
把小时的两个分支用括号括起来,确保|只作用于小时的两种情况,而不是分割整个日期和时间部分:
private static final String DATE_TIME_REGEX = "^(20[1-5]\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12]\\d|3[01])\\s(([0-1]\\d)|(2[0-3])):([0-5]\\d):([0-5]\\d)$";
更可靠的验证方案(推荐)
正则只能校验格式,没法处理实际的日期合法性(比如2024-02-30这种格式正确但不存在的日期),直接用Java的日期API验证更靠谱:
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public static boolean validateDate(String dateStr) { try { LocalDateTime.parse(dateStr, dateTimeFormatter); return true; } catch (DateTimeParseException e) { return false; } }
这个方法不仅能校验格式,还能确保日期是真实存在的有效日期。
内容的提问来源于stack exchange,提问作者Bradley D
相关产品推荐
相关产品推荐

