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
相关产品推荐
相关产品推荐

