我想要一个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。
试试下面的方法
^([0-2][0-3]:[0-5][0-9])|(0?[0-9]:[0-5][0-9])$
注意:我假设是javascript的正则表达式引擎。如果与此不同,请告诉我。
你原来的正则表达式有缺陷:例如,它不能匹配04:00。
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]
[0-1]?[0-9]
2[0-3]
第二个数字(分钟)总是在00和59之间的数字——> [0-5][0-9](不允许单个数字)
[0-5][0-9]
我的是:
^(1?[0-9]|2[0-3]):[0-5][0-9]$
这个要短得多
用几个例子进行了测试
匹配:
并且不匹配任何无效的实例,如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]))$
/^(0?[1-9]|1[0-2]):[0-5][0-9]$/
/((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
/^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
/^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
/(?:[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:
hours:minutes
am|pm
AM|PM
05:01
5:1
01
12
00:16 am
00
59
01:16 am✅ 01:16 AM✅ 01:16❌(错过am|pm) 01:16 Am❌(am必须是小写或大写) 1:16 am❌(小时错过前导零) 00:16❌(无效的小时值00)
01:16 am
01:16 AM
01:16
01:16 Am
am
1:16 am
00:16
匹配单个匹配项: ^(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)$
匹配多个匹配项: 删除^ $ (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)
看看这个
/^([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]|5[0-9])$/