【问题标题】:regExp for HH:mm format including intermediate valueHH:mm 格式的正则表达式,包括中间值
【发布时间】:2021-06-18 13:58:15
【问题描述】:

我正在尝试编写一个接受HH:mm 时间格式但也接受所有中间值的正则表达式:

例如所有这些都被接受:

0
1
12
12:
12:3
12:30
1:
1:3
1:30

现在,我想出了这个:^([\d]{1,2}):?([\d]{1,2})?$

但这接受小时和分钟的任何数字 1/2 数字值(例如,25:66 是可以接受的)

所以我相对接近我的目标,但我需要从小时中过滤掉值 x>24,从分钟中过滤掉 x>60

【问题讨论】:

  • 可能,您可以为您的要求构建一个正则表达式模式。但是,如果您需要进行数学计算,正则表达式不是一个好工具。我建议将输入拆分为: 并检查小时和分钟。会容易很多。

标签: regex


【解决方案1】:

试试这个:

^((?:[01][0-9]?)|(?:2[0-4]?)|(?:[3-9]))(?::((?:[0-5][0-9]?)|(?:60))|:)?$

注意

这接受24 for HH60 for MM 如您的问题所述:

但我需要从小时中过滤掉值 x>24,从分钟中过滤掉 x>60

因此 ff。被接受:

0
1
12
12:
12:3
12:30
1:
1:3
1:30
1:60
24:60
24:00
00:60

以下不接受:

25:30
00:61

Regex DEMO 1

如果您想排除 24 HH60 MM,请尝试以下操作:

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

Regex DEMO 2

组(适用于两种情况):

  • \1 = HH
  • \2 = MM

【讨论】:

    【解决方案2】:

    你正在寻找

    ^(?:[01]\d?|2[0-3]?)(?::(?:[0-5]\d?)?)?$
    

    查看regex demoregex graph

    详情

    • ^ - 字符串开头
    • (?:[01]\d?|2[0-3]?) - 01 后跟可选数字,或 2 后跟可选 0123
    • (?::(?:[0-5]\d?)?)? - 可选的模式序列:
      • : - 冒号
      • (?:[0-5]\d?)? - 可选的模式序列:
        • [0-5] - 从 15 的数字
        • \d? - 可选数字
    • $ - 字符串结束。

    【讨论】:

    • 谢谢,解释也很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2012-09-18
    • 1970-01-01
    • 2023-03-18
    • 2013-01-26
    相关资源
    最近更新 更多