我想要一个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。
当前回答
声明
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-1]?[0-9]|2[0-3]):([0-5]?[0-9]|5[0-9])$/
时间的正则表达式
HH:MM 12小时格式,前导0可选 / ^(0 ?(1 - 9) | 1[0]):[0 - 9][0 - 5] /美元 HH:MM 12小时格式,可选前导0,必选经脉(AM/PM) (0 - 2) /((1 | 0 ?[1 - 9]):([0 - 9][0 - 5]) ?([前不久](Mm))) / HH:MM 24小时,前导0 / ^(0[0 - 9][0 - 9] | | 1 2(0 - 3)):[0 - 9][0 - 5] /美元 HH:MM 24小时格式,前导0可选 / ^([0 - 9][0 - 9][0 - 9] | 1 | 0 | 2(0 - 3)):[0 - 9][0 - 5] /美元 HH:MM:SS 24小时格式,前导0 / (?: [01] \ d | 2 (0 - 3)): (?: (0 - 5) \ d): (?: (0 - 5) \ d) /
参考及示范
对上面的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点 等。
下面的正则表达式将有助于验证hh:mm格式
^([0-1][0-9]|2[0-3]):[0-5][0-9]$
您的代码将无法正常工作,因为它不能用于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"))