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

我想要一个regexp来匹配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。

388616 次浏览

试试下面的方法

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

注意:我假设是javascript的正则表达式引擎。如果与此不同,请告诉我。

你原来的正则表达式有缺陷:例如,它不能匹配04:00

这可能会更好:

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

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

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

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

以上对我来说都没用。 最后我使用:

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

逻辑:

第一个数字(小时): 一个介于0和19之间的数字——> [0-1]?[0-9](允许单个数字)
或< br > 一个介于20 - 23之间的数字——> 2[0-3]

第二个数字(分钟)总是在00和59之间的数字——> [0-5][0-9](不允许单个数字)

我的是:

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

这个要短得多

用几个例子进行了测试

匹配:

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

并且不匹配任何无效的实例,如25:76等…

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

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

最好的是HH:MM,没有任何风险。

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

检查我构建的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

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

你可以24小时使用,秒是可选的

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

你可以使用这个正则表达式:

^(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链接 < / p >

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

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

你可以试试下面的方法

^\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

下面的正则表达式将有助于验证hh:mm格式

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

声明

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-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

活动链接是可用的在这里

对上面曼尼什·M·登布拉尼的的贡献略有修改 处理4点 (我摆脱了秒部分,因为我不需要它在我的应用程序)

^(([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]))$
< p >处理: 4点 4点 4:00 4:00am 下午4点 4.30点 等< / p >

时间的正则表达式

  • < p > HH:MM 12小时格式,前导0可选

    /^(0?[1-9]|1[0-2]):[0-5][0-9]$/
    
  • < p > HH:MM 12小时格式,可选前导0,必选经脉(AM/PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
    
  • < p > HH:MM 24小时,前导0

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

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
    
  • < p > HH:MM:SS 24小时格式,前导0

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

< a href = " https://digitalfortress。tech/tips/top-15-common -used-regex/" rel="nofollow noreferrer">参考和演示 .

您的代码将无法正常工作,因为它不能用于01:00类型格式。您可以修改如下。

pattern =r"^(0?[1-9]|1[0-2]):[0-5][0-9]$"

为了不那么复杂,我们可以使用一个变量来定义我们的工作时间限制。此外,我们可以添加经络以获得更准确的结果。

hours_limit = 12
pattern = r"^[1-hours_limit]:[0-5][0-9]\s?[AaPp][Mm]$"
print(re.search(pattern, "2:59 pm"))

上面的答案对我都没用,下面这个有用。

"[0-9]{2}:[0-9]{2}"

要验证24小时时间,使用:

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

接受:

22:10
2:10
2/1
...

但不接受:

25:12
12:61
...

描述

hours:minutes:

  • 必选am|pmAM|PM
  • 强制前导零05:01代替5:1
  • 0112
  • Hours不接受00:16 am中的00
  • 0059的分钟

01:16 am
01:16 AM
01:16❌(错过am|pm)
01:16 Am❌(am必须是小写或大写)
1:16 am❌(小时错过前导零)
00:16❌(无效的小时值00)

正则表达式

匹配单个匹配项:
^(0[1-9]|1[0-2]):([0-5][0-9]) ((a|p)m|(A|P)M)$ < / p >

匹配多个匹配项:
删除^ $
(0[1-9]|1[0-2]):([0-5][0-9]) ((a|p)m|(A|P)M) < / p >

看看这个

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