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

Java如何通过正则匹配验证重复时间间隔字符串格式?

验证时间间隔字符串格式的正则方案

首先明确:使用Pattern.matches()方法完全可行,该方法默认会匹配整个输入字符串(等价于正则前后自动加上^和$),刚好符合你校验完整格式的需求。

你之前的正则^[0-9:0-9-0-9:0-9,]+$无效的原因是:它只是一个字符集合校验,仅限制字符串只能包含数字、冒号、减号、逗号,但完全没有校验时间的合法结构(比如小时必须是00-23,分钟00-59,以及时间-时间的间隔格式),所以会放过很多非法格式(比如25:61-30:70)。

正确的正则表达式

针对HH:MM-HH:MM重复n次(用逗号分隔)的格式,正确的正则如下:

String regex = "^([01]\\d|2[0-3]):([0-5]\\d)-([01]\\d|2[0-3]):([0-5]\\d)(,([01]\\d|2[0-3]):([0-5]\\d)-([01]\\d|2[0-3]):([0-5]\\d))*$";

正则拆解:

  • ([01]\\d|2[0-3]):匹配合法小时,[01]\\d覆盖00-19,2[0-3]覆盖20-23
  • ([0-5]\\d):匹配合法分钟,覆盖00-59
  • ([01]\\d|2[0-3]):([0-5]\\d)-([01]\\d|2[0-3]):([0-5]\\d):匹配单个HH:MM-HH:MM时间间隔
  • (,单个间隔)*:允许零个或多个用逗号分隔的后续时间间隔

代码示例

import java.util.regex.Pattern;

public class TimeIntervalValidator {
    public static void main(String[] args) {
        String validInput = "09:00-10:00,12:00-14:30,16:00-18:00";
        String invalidInput1 = "25:00-10:00"; // 小时非法
        String invalidInput2 = "09:60-10:00"; // 分钟非法
        String invalidInput3 = "09:0010:00"; // 缺少分隔符
        
        String regex = "^([01]\\d|2[0-3]):([0-5]\\d)-([01]\\d|2[0-3]):([0-5]\\d)(,([01]\\d|2[0-3]):([0-5]\\d)-([01]\\d|2[0-3]):([0-5]\\d))*$";
        
        System.out.println(Pattern.matches(regex, validInput)); // 输出 true
        System.out.println(Pattern.matches(regex, invalidInput1)); // 输出 false
        System.out.println(Pattern.matches(regex, invalidInput2)); // 输出 false
        System.out.println(Pattern.matches(regex, invalidInput3)); // 输出 false
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:15:31