我希望按季度'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)?$
感谢。
答案 0 :(得分:3)
[01][05]|[4][5]|[3][0]
可能与10
或05
匹配,您正在寻找[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;
}