用于匹配HH:MM时间格式的正则表达式


165

我想要以HH:MM格式匹配时间的正则表达式。这是我所拥有的,并且有效:

^[0-2][0-3]:[0-5][0-9]$

匹配从00:00到23:59的所有内容。

但是,我想更改它,以便也匹配0:00和1:00等以及00:00和01:30。即,使最左边的数字为可选,以匹配HH:MM和H:MM。

有什么想法可以进行更改吗?我需要这个才能在javascript和php中工作。


15
实际上,您原来的正则表达式将不会匹配整个有效时间值范围,例如17:00
David Clarke

Answers:


366

您的原始正则表达式有缺陷:04:00例如,它不匹配。

这可能会更好:

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

45
此regExp用于没有前导零的时间。RegExp的前导零时间是^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO 2014年

15
@SergO请更仔细地阅读他的答案。他的答案是前导零和无前导。
亚历山大

11
格式略短的是^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
在C#中也能很好地工作。
理查德·伊夫

10
@SergO不应该是^(0 [0-9] | 1 [0-9] | 2 [0-3]):[0-5] [0-9] $?
马丁

57

时间的正则表达式

  • HH:MM 12小时制,可选前导0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH:MM 12小时制,可选前导0,强制性成语(AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH:MM 24小时领先0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH:MM 24小时制,可选前导0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH:MM:SS 24小时格式,开头为0

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

参考和演示


4
谢谢!这个答案应该放在顶部。
Marc

是否有HH:MM 24小时领先0的原因不是^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$
Macovei Vlad18年

因为答案中的正则表达式效果很好。您评论的那个也可以。随意使用它们之一。:)
Niket Pathak

对于使用上述正则表达式匹配12小时(上午/下午)字符串的用户,请记住,针对正则表达式测试“ 13:00 PM”将返回true(某些值),因为字符串中的“ 3:00 PM”部分为有效。我通过使用以下if语句let res = value.match(regex);解决了该问题。if(res && res [0] === value)doSomething();
塔哈·雷曼·西迪基

49

以上都不对我有用。最后,我使用了:

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

逻辑:

第一个数字(小时)为:0到19之间的数字-> [0-1]?[0-9](允许一位数字)

20到23之间的数字->2[0-3]

第二个数字(分钟)始终是00到59之间的数字-> [0-5][0-9](不允许使用一位数字)


8
您不需要第一个方括号中的破折号[01]就可以了;)
捷克学2014年

3
将此答案修改为仅接受12小时(包括可选的前导零):^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawd

^([0-1][0-9]|2[0-3]):[0-5][0-9]$强制前导零
Manan Mehta



3

令人惊讶的是,我发现实际上所有这些都不能完全覆盖它,因为它们不适用于0:0的更短格式午夜,而有些也不适用于00:00,我使用并测试了以下内容:

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

2

您可以使用以下正则表达式:

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

如果要排除00:00,可以使用此表达式

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

第二个表达式是更好的选择,因为有效时间是00:01到00:59或0:01到23:59。您可以根据需要使用其中任何一种。 Regex101链接


第一个表达式不接受00:05。但是,谢谢。引导我进行所需的验证。
JazZ

2

火柴:

2:9
2:09
2:59
02:9
02:09
02:59
23:59

用它:

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

2:9或02:9是什么样的时间?
vs97

例如在C#中,有很多选项可以将DateTime对象转换为字符串。DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 。有关更多信息,请参见链接
Pedram Ahmadpour '19

1

如您所问,最左边的部分是可选的,我也做了最左边的部分和最右边的一些,请查看

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

它与

0:0 
00:00
00:0 
0:00
23:59
01:00
00:59

实时链接在这里


0

您可以使用以下正则表达式:

^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$

0

宣布

private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";

public boolean validate(final String time) {
    pattern = Pattern.compile(TIME24HOURS_PATTERN);
    matcher = pattern.matcher(time);
    return matcher.matches();
}

当String与正则表达式匹配时,此方法返回“ true”。


0

在凌晨4点以上对Manish M Demblani的贡献进行了轻微修改(我删除了秒部分,因为我的应用程序中不需要它)

^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$

句柄:4am 4 am 4:00 4:00 am 4:00 pm 4.30 am等。


1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
艾德·莫顿


-1

我的是:

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

这要短得多

用几个例子进行了测试

比赛:

  • 00:00
  • 7:43
  • 07:43
  • 19:00
  • 18:23

而且不匹配任何无效实例,例如25:76等...


09:30不匹配
绿色

您自己的示例00:00和07:43不匹配。
Christiaan Westerbeek

-1

您可以尝试以下

^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$

它可以检测以下模式:

2300 
23:00 
4 am 
4am 
4pm 
4 pm
04:30pm 
04:30 pm 
4:30pm 
4:30 pm
04.30pm
04.30 pm
4.30pm
4.30 pm
23:59 
0000 
00:00

-1

检查我为寻找用户指定的时间戳而构建的这个masterfull时间戳检测器正则表达式,包括但不限于它的示例;

8:30-9:40
09:40-09 : 50
09 : 40-09 : 50
09:40 - 09 : 50
08:00to05:00
08 : 00to05 : 00
08:00 to 05:00
8am-09pm
08h00 till 17h00
8pm-5am
08h00,21h00
06pm untill 9am

只要时间包含数字,它还会拾取更多


1
RegExr requires a modern browser. Please update your browser to the latest version and try again....我什至看不到...:-/
Martin Tournoij 2014年

-3

尝试以下

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

注意:我假设使用javascript regex引擎。如果不同于此,请告诉我。


-3

您可以使用以下正则表达式:

^[0-2]?[0-3]:[0-5][0-9]$

只有我所做的修改是最左边的数字是可选的。其余的正则表达式相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.