我想解析 hh:mm:ss 细绳。一个简单的是 ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) 期望 2:3:24 或者 02:03:24 细绳。

我想进一步迈出一步,即使在诸如此类的情况下也可以通过验证

  1. 如果您只输入56,则应该通过,因为56可以将其视为56秒[SS
  2. 如果输入2:3或02:03或02:3或2:03,则应该通过。 2分3秒[mm:SS
  3. 如果您输入20:30:12的通行证20小时,30分钟和12秒[HH:MM:SS
  4. 如果您输入78:12,请不要通过78分钟是错误的。

基本上,如果找到一个“:”,请在“ mm”和“ mm”之前考虑数字:“:”为ss。如果发现两个“:”为HH:MM:SS

我想出了这种模式。

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

似乎工作正常。我想知道可以完成这项工作的其他任何简单的正则表达式。

有帮助吗?

解决方案

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

解释:

^                   # Start of string
(?:                 # Try to match...
 (?:                #  Try to match...
  ([01]?\d|2[0-3]): #   HH:
 )?                 #  (optionally).
 ([0-5]?\d):        #  MM: (required)
)?                  # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d)          # SS (required)
$                   # End of string

其他提示

@Tim Pietzcker涵盖了OP对HH的要求:MM:SS Parser,SS是强制性的,即

  • HH:MM:SS
  • MM:SS
  • SS

如果您允许我偏离OP的要求,并考虑强制性HH的情况,即

  • hh
  • HH:MM
  • HH:MM:SS

我想出的正则是:

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

让我们分解:

  • ([0-1]?\d|2[0-3]) - 比赛数小时
  • (?::([0-5]?\d))? - 可选匹配几分钟
  • (?::([0-5]?\d))? - 可选匹配秒
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top