改进正则表达式以按季度匹配日期时间

时间:2013-01-31 22:25:47

标签: .net regex

我希望按季度'dd.mm.yyyy HH:mm':00:15:30

验证字符串,使日期与:45相匹配

实施例

12.03.2012 20:00
28.12.2014 20:15
31.09.2012 01:45

这个正则表达式对我有用

^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).((20)\d\d) ([01][0-9]|2[0-4]):([01][05]|[4][5]|[3][0])?$

但是,这是最好的方法吗?

请给出一些改进建议。

@Kobi很棒的建议

^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.((20)[1-9][0-9]) ([01][0-9]|2[0-4]):([03]0|[14]5)?$

感谢。

1 个答案:

答案 0 :(得分:3)

[01][05]|[4][5]|[3][0]可能与1005匹配,您正在寻找[03]0|[14]5

:(...)?验证以:结尾的字符串。你想要(:...)?之类的东西 - 冒号应该在括号内。

请务必避开点:\.而不是. - 否则它会匹配所有字符。

如果最终在.net引擎上,\d匹配所有Unicode数字,那么您可能更喜欢[0-9]

我还建议使用以下代码,这可能会更加健壮(例如 - 它使日期无效,如29.02.2013 vs 29.02.2012):

public bool IsValidDateAndHour(string input)
{
    DateTime date;
    bool success = DateTime.TryParseExact(input, "dd.MM.yyyy HH:mm",
                                          CultureInfo.InvariantCulture,
                                          DateTimeStyles.None, out date);
    return success && date.Minute % 15 == 0;
}