我想要一个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-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](不允许是单个数字)

其他回答

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

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

你可以使用以下正则表达式:

^[0-2]?[0-3]:[0-5][0-9]$

我所做的唯一修改是最左边的数字是可选的。正则表达式的其余部分是相同的。

上面的答案对我都没用,下面这个有用。

"[0-9]{2}:[0-9]{2}"

下面的正则表达式将有助于验证hh:mm格式

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