用于匹配HH:MM时间格式的正则expression式
我想要一个正则expression式来匹配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。
你原来的正则expression式有缺陷:例如,它不会匹配04:00
。
这可能会更好地工作:
^([0-9]|0[0-9]|1[0-9]|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]
(允许单个数字)
要么
20-23之间的数字 – > 2[0-3]
第二个数字(分钟)始终是00和59之间的数字 – > [0-5][0-9]
(不允许单个数字)
令人惊讶的是,我发现实际上所有这些都没有完全覆盖它,因为它们不适用于0:0的短格式午夜,有些在00:00也不工作,我使用并testing了以下内容:
^([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]$
你可以使用这个正则expression式:
^(2[0-3]|[01]?[0-9]):([1-5]{1}[0-9])$
如果你想排除00:00,你可以使用这个expression式
^(2[0-3]|[01]?[0-9]):(0[1-9]{1}|[1-5]{1}[0-9])$
第二个expression式是更好的select,因为有效时间是00:01到00:59或0:01到23:59。 你可以根据你的要求使用这些。 Regex101链接
你可以使用这个24H,秒是可选的
^([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[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与正则expression式匹配时,此方法返回“true”。
你可以使用下面的正则expression式:
^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$
^([0-1][0-9]|2[0-3]):[0-5][0-9]$
火柴:
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])$
我的是:
^(1?[0-9]|2[0-3]):[0-5][0-9]$
这个要短得多
用几个例子来testing它
比赛:
- 00:00
- 7:43
- 07:43
- 19:00
- 18:23
并不匹配任何无效的实例,如25:76等…
我build立了这个正则expression式
\d{1,2}\s{0,2}(am|pm|([-|:|h| ]\s{0,2}\d{1,2}\s{0,2})?)\s{0,2}(-|to|till|,|untill)\s{0,2}\d{1,2}\s{0,2}(am|pm|([-|:|h| ]\s{0,2}\d{1,2}\s{0,2})?)
寻找一个用户指定的时间戳,例子什么它将拾取包括,但绝对不限于;
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
只要时间包括数字,它也将拾起更多
你可以尝试以下
^\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
你可以使用下面的正则expression式:
^[0-2]?[0-3]:[0-5][0-9]$
只有我所做的修改是最左边的数字是可选的。 其余的正则expression式是相同的。
尝试以下
^([0-2][0-3]:[0-5][0-9])|(0?[0-9]:[0-5][0-9])$
注:我假设的JavaScript正则expression式引擎。 如果不是这样,请让我知道。