正则表达式 - 时间验证 ((h)h:mm)

15
/^\d{1,2}[:][0-5][0-9]$/

这是我目前的代码。它将分钟限制在00-59之间。但是,它不会将小时限制在0到12之间。为了保持一致性和统一性,如果可能的话,我想仅使用正则表达式来实现这一点。

此外,我希望第一个数字是可选的。例如,09:30和9:30都应该被接受。我尝试使用范围进行操作,但是超出范围的输入始终是可以接受的。

7个回答

22

假设你使用的是12小时制时间,那么0不是一个有效的小时数,应该被排除在外(正如Jon所指出的)。这里是一个基本解决方案:

/^(0?[1-9]|1[012]):[0-5][0-9]$/

一个类似的能够匹配24小时时间的正则表达式:

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

12

需要分别处理0-9和10-12这两种情况。(这两个规则可以用|组合起来。)

/^(?:0?\d|1[012]):[0-5]\d$/

这里

  • (?:…)是一个非捕获组
  • x|y表示匹配其中任意一种模式
  • 0?\d匹配0-9或00-09
  • 1[012]匹配10-12

1
24小时制的时钟怎么样? - Neil Knight

10

如果您正在寻找24小时格式匹配,

hh:mm:ss或h:mm:ss:

status = /^(2[0-3]|[0-1]?[\d]):[0-5][\d]:[0-5][\d]$/.test(timestr)

hh:mm或h:mm:

status = /^(2[0-3]|[0-1]?[\d]):[0-5][\d]$/.test(timestr)

这个网站很适合测试: https://www.regexpal.com/ 补充说明:为了完整起见:
- `^`:字符串的开头,`$`: 字符串的结尾。因此,我们将表达式放在 `^..$` 块中,以确保没有超出模式的范围。 - `(2[0-3]|[0-1]?[\d])`: 翻译成 `2[0-3]` 或 `[0-1]?[\d]` - `2[0-3]`: 20, 21, 22, 23 - `[0-1]?[\d]`: 0或1或无(`?`)后跟任何单个数字(`\d`)。因此,这适用于从0到19的数字。 - `:`:只是那个字符 - `[0-5][\d]`: 数字从00到59。注意:这不容忍mm位上的单个数字。

7
/^(10|11|12|[1-9]):[0-5][0-9]$/

我认为您也不希望将0:50作为有效时间。


另一种方法可能是:/^(1[0|1|2]|[1-9]):[0-5][0-9]$/ - amol

2

谢谢!我现在使用这个JavaScript代码:

function Check_arrival(time) { //假设您是在12小时制下工作,0不是有效值 var patt = new RegExp("^(0?[1-9]|1[012]):[0-5][0-9]$"); var res = patt.test(time); return res; }

返回值:true或false


很好,你提供了使用JavaScript RegExp类的方法,因为OP被标记为JavaScript。我仍然喜欢@Trey Hunner的答案,因为它考虑到了24小时的情况。 - hubson bropa

0

这是完美的:^0?([0-9][0-2]?):[0-5][0-9]$

注意:仅限12小时制钟表

适用于以下时间:

0:01- 12:59

或者

00:01 - 12:59


抱歉这是完美的 :) (([0-9][0-2]?)|([0][0-9])):[0-5][0-9]$ - Byorn
00:00 - 12:59 或 0:00 - 12:59 - Byorn

0

^(([0-9]{1})|([0-1]{1}[0-9]{1})|([2]{1}[0-3]{1}))(([:]{1})?)(([0-5]{1}[0-9]?)?)$

  • 29:30 <- 无效
  • 9:21 <- 有效
  • 13:25 <- 有效
  • 19:01 <- 有效
  • 19:62 <- 无效
  • 24:00 <- 无效
  • 23:59 <- 有效
  • 00:00 <- 有效
  • 1 <- 有效(可清理为01:00)
  • 20 <- 有效(可清理为20:00)
  • 20: <- 有效(可清理为20:00)
  • 20:5 <- 有效(可清理为20:50)

^(([0-9]{1})|([0-1]{1}[0-9]{1})|([2]{1}[0-3]{1}))([:]{1})([0-5]{1}[0-9]{1})$

  • 29:30 <- 无效
  • 9:21 <- 有效
  • 13:25 <- 有效
  • 19:01 <- 有效
  • 19:62 <- 无效
  • 24:00 <- 无效
  • 23:59 <- 有效
  • 00:00 <- 有效
  • 1 <- 无效
  • 20 <- 无效
  • 20: <- 无效
  • 20:5 <- 无效

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接