我想要一个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。


当前回答

声明

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

其他回答

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

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

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

^([0-1]?[0-9]|[2][0-3]):([0-5][0-9])(:[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包含数字

对上面的Manish M Demblani的贡献做了一个小小的修改 处理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]))$

处理: 4点 4点 4:00 4:00am 下午4点 4.30点 等。

正如你问的最左位可选,我也做了最左位和最右位可选,看看

^([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

现场链接在这里