0

我想验证一个字符串以匹配日期,如'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)?$

谢谢。

4

1 回答 1

3

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

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

确保转义点:\.而不是.- 否则它匹配所有字符。

如果这最终出现在 .net 引擎上,则\d匹配所有 Unicode 数字,因此您可能更喜欢[0-9].

我还建议使用以下代码,这可能会更加健壮(例如 - 它使 29.02.2013 与 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;
}
于 2013-01-31T22:32:13.680 回答