You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式在线验证通过但Java应用中验证失败求助

问题排查与解决

正则表达式的核心错误

你写的正则里,小时部分的分组逻辑出了问题:
原正则中([0-1]\\d)|(2[0-3])的竖线|没有被正确包裹,导致整个正则的匹配逻辑变成了两种情况:

  1. yyyy-MM-dd 小时(后面的时分秒被忽略)
  2. 小时:分:秒(前面的日期被忽略)
    这就导致完整的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:36:00