正则表达式匹配时间

时间:2012-12-06 13:52:21

标签: regex

我希望我的用户能够输入时间表。 如果需要更多信息,用户可以使用它来表示完成任务所需的时间,如果已填写,则会将其保存在数据库中。

这就是我所拥有的:

/^$|^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/

匹配空表格或01:30和01:30:00格式化时间。我真的不需要秒,因为每个任务至少需要一分钟,但我尝试删除它,它只是崩溃了我的代码并删除了对空字符串的支持..我真的根本不理解正则表达式。

我想要的是匹配简单的分钟和简单的小时,例如3:30,3:00,5。这可能吗?它将极大地改善用户体验并限制浪费类型。但我想保留零可选,以防一些用户发现自然输入它。

1 个答案:

答案 0 :(得分:1)

我认为以下模式可以满足您的需求:

p="((([01]?\d)|(2[0-4])):)?([0-5]\d)?(:[0-5]\d)?"

第一部分:

(([01]?\d)|(2[0-3])):)?

是一个可选组,以00-24格式处理小时数。

第二部分:

([0-5]\d)?

是一个可选组,用于处理表达式中存在小时或秒的分钟数。该小组还处理只包含几分钟或几小时的表达。

第三部分:

(:[0-5]\d)?

是一个处理秒数的可选组。

以下示例显示了工作模式:

In [180]: re.match(p,'14:25:30').string
Out[180]: '14:25:30'

In [182]: re.match(p,'2:34:05').string
Out[182]: '2:34:05'

In [184]: re.match(p,'02:34').string
Out[184]: '02:34'

In [186]: re.match(p,'59:59').string
Out[186]: '59:59'

In [188]: re.match(p,'59').string
Out[188]: '59'

In [189]: re.match(p,'').string
Out[189]: ''

由于每个组都是可选的,因此模式也匹配空字符串。我已经用Python测试了它,但我认为它也适用于其他语言而且变化很小。