需要正则表达式来匹配HH:MM和HHMM时间格式

时间:2014-02-03 05:42:39

标签: .net regex

我正在一张工作表中节省时间,该工作表可以存储00:0023:5900002359之间的值。然而,我使用的正则表达式不起作用。任何小于10:00小时的值,例如9:00它都不起作用。我意识到它的错误并没有达到标记可以任何人帮助正确的正则表达式或修复这个:

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

注意我需要能够输入没有冒号的值。

4 个答案:

答案 0 :(得分:1)

我能想到的最好的东西似乎与你自己的尝试相匹配是这样的:

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

Regular expression visualization

Debuggex Demo

似乎你想要允许单个和两个数字的输入(我想是数分钟,因为允许的两位数是00到59),Michal的答案没有考虑到。但Anirudh的解决方案可能是最好的解决方案。但这取决于你的需求。

此致

答案 1 :(得分:0)

不要使用正则表达式。您可以使用TimeSpan

TimeSpan.ParseExact(input,"hh:mm",CultureInfo.CurrentCulture);

如果输入不是hh:mm格式

,则抛出异常

虽然你的正则表达式中缺少[0-9](:\d{1,2})?

答案 2 :(得分:0)

您可以修改从Regular expression for matching HH:MM time format

的答案
^([0-9]|0[0-9]|1[0-9]|2[0-3]):?[0-5][0-9]$

看起来像这样

Regexp to match the datetime

答案 3 :(得分:0)

你可以尝试这个:

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