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

Java中匹配HH:MM时间格式的正则表达式故障排查与解决

HH:MM格式正则匹配失败问题排查与修复

问题根源

你写的正则表达式首尾的/是JavaScript等脚本语言的正则语法分隔符,但Java的Pattern.compile()方法不需要这两个符号——它们会被当作字面量字符参与匹配,导致正则实际在匹配以/开头、以/结尾的字符串,自然返回false。
而正则核心逻辑^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$是正确的,可覆盖00:00到23:59的合法时间范围。

修正后的代码

移除正则首尾的/即可解决问题:

public static boolean isHour(String hora) {
    boolean isHour = false;
    try {
        Pattern pattern = Pattern.compile("^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$");
        Matcher matcher = pattern.matcher(hora);
        isHour = matcher.matches();
    } catch(Exception e) {
        logger.error("error isDate boolean", e);
    }
    return isHour;
}

更简洁的正则写法

可以合并小时部分的分支,用非捕获组优化效率,效果完全一致:

Pattern pattern = Pattern.compile("^(?:[01]\\d|2[0-3]):[0-5]\\d$");

更可靠的替代方案(推荐)

用Java自带的日期时间API验证格式,比正则更严谨,还能避免正则可能遗漏的边界错误:

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public static boolean isHour(String hora) {
    try {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
        LocalTime.parse(hora, formatter);
        return true;
    } catch (DateTimeParseException e) {
        logger.error("error validating hour format", e);
        return false;
    }
}

内容的提问来源于stack exchange,提问作者Yeyo9210

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:09:56