0

我希望我的用户能够输入时间表单。如果需要更多信息,用户用它来表示完成一项任务需要多少时间,如果填满,它将保存在数据库中。

这是我所拥有的:

/^$|^([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。这可能吗?它将极大地改善用户体验并减少打字浪费。但我想保持零可选,以防某些用户觉得输入它很自然。

4

1 回答 1

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 对其进行了测试,但我认为它也可以与其他语言一起使用,只需进行最小的更改。

于 2012-12-06T15:21:05.373 回答