/^\d-\d,\d{2}:\d{2}-\d{2}:\d{2}(;\d-\d,\d{2}:\d{2}-\d{2}:\d{2})*$/.test
就是你先写一遍。然后重复次数任意。
看了楼下的答案,哈哈哈我不应该全用 \d
, 每一个位置应该设定对应的时间范围
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
这个没必要用正则,格式对不等于符合要求。比如结束时间应大于开始时间靠正则无法保证的。
实际界面应该用多个组件给用户录入,然后拼合为字符串,而不是让用户自己敲这个字符串。
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
[1-7]
(?:[01]\d|2[0-4])
[0-5]\d
[1-7]-[1-7],(?:[01]\d|2[0-4]):[0-5]\d-(?:[01]\d|2[0-4]):[0-5]\d
[1-7]-[1-7],(?:[01]\d|2[0-4]):[0-5]\d-(?:[01]\d|2[0-4]):[0-5]\d(?:;[1-7]-[1-7],(?:[01]\d|2[0-4]):[0-5]\d-(?:[01]\d|2[0-4]):[0-5]\d)*
/^[1-7]-[1-7],(?:[01]\d|2[0-4]):[0-5]\d-(?:[01]\d|2[0-4]):[0-5]\d(?:;[1-7]-[1-7],(?:[01]\d|2[0-4]):[0-5]\d-(?:[01]\d|2[0-4]):[0-5]\d)*$/
数据的验证其实不止正则一种方法,要结合实际来处理。
用了正则式,不表示不能用其它方法。
这里其实从信息提取来说,就是先用;
分隔为多个时间段
每个时间段又可以用,
分隔为d
部分和hh:mm
部分
对d
部分和hh:mm
部分还可以用-
分隔为2个分部,
这时再用正则式来判断其实就很简单啦
对于d
的各个分部就是/^[1-7]$/
对于hh:mm
的各个分部就是/^([01]\d|2[0-4]):[0-5]\d$/
这样分隔开的好处是还可以有更复杂的比较,比如要求d
分隔的部分,后面一个要不小于前面一个,hh:mm
分隔的也类似。对此,正则式用于基本格式比较判断,真正的数值比较还可以引入其它方法。
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
首先解决这个
d-d,hh:mm-hh:mm
的正则:d是1-7,那就
[1-7]
不过分吧。然后hh是第一个h是0-2,然后第一个h是2的话,第二个h只能是0-4,其他情况0-9.
mm 就比较简单了 第一个m:0-5,第二个:0-9
所以正则是:
[1-7]-[1-7],([0|1][0-9]|2[0-3]):([0-5][0-9])-([0|1][0-9]|2[0-3]):([0-5][0-9])
。再然后就是分隔符的正则,简化一下:
A;A
,需要做的是要么只有一个A,要么有多个;A
在后面跟着,那其实就是^A(;A)*$
再把两个组合一下:
可以去这里写正则验证看看>>

不过我看你题目里还允许有
24:00
的格式,被我排除掉了,如果需要的话,可自行调整哈。