正则表达式匹配时间范围

时间:2015-03-21 23:19:57

标签: javascript regex

我正在尝试创建一个正则表达式来解析和验证Javascript中的时间范围。请记住,我只是想解析正确结构化的字符串。关于时间范围的验证逻辑是在之后进行的

要求:

  1. 时间元素始终在24小时内表示,应为(HH:mm) 格式。
  2. 时间范围定义为由短划线
  3. 分隔的2个时间元素
  4. 字符串应至少有一个时间范围或更多以逗号分隔
  5. 匹配模式应该容忍元素之间的空格
  6. 经过验证的字符串应匹配整体或完全无法匹配
  7. 我提出的是以下内容:

    /((?:[01]\d:[0-5][0-9]|2[0-3]:[0-5][0-9])(?:\s?)-(?:\s?)(?:[01]\d:[0-5][0-9]|2[0-3]:[0-5][0-9])(?:\s?,\s?)?)/g
    

    除了规则5之外似乎满足所有规则。如果存在不正确的字符,则它们根本不匹配,但表达式不会作为一个整体失败

    有没有办法在这个正则表达式中嵌入规则5?

1 个答案:

答案 0 :(得分:0)

添加锚点以标记字符串的开头和结尾:

^((?:[01]\d:[0-5][0-9]|2[0-3]:[0-5][0-9])(?:\s?)-(?:\s?)(?:[01]\d:[0-5][0-9]|2[0-3]:[0-5][0-9])(?:\s?,\s?)?)+$demo

然后,抓住整个匹配,然后按,分割。