我想要一个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。
我想要一个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。
当前回答
对上面的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
现场链接在这里
检查这个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包含数字
描述
小时:分钟:
强制am|pm或am|pm 强制引导零点05:01而不是5:1 从1点到12点 Hours不接受00为00:16 am 从00到59分
01:16 am✅ 01:16 am✅ 01:16❌(miss am|pm) 01:16 Am❌(Am必须全部小写或大写) 凌晨1:16❌(小时错过前导零) 00:16❌(无效时间值00)
正则表达式
匹配单个事件: ^ (0 (1 - 9) | 1 [0]): ([0 - 9] [0 - 5]) ((| p) m | | p m)美元
要匹配多个事件: 移除^ $ (0 (1 - 9) | 1 [0]): ([0 - 9] [0 - 5]) ((| p) m | | p m)
以上这些方法对我都没用。 最后我用了:
^([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](不允许是单个数字)
声明
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”。