回答您关于正则表达式的问题,有几个问题。
- 关键是开头
(* 的问题(vks 已经指出)
- 另一个关键问题是在
d{2}+ 中使用另一个错位的量词+
- 还有一个问题是您已将替代项放入字符类中。
([\w{3}]|[\d{2}])+ 表示“从 2 个选项中选择:1) \w, {, 3, 或 }, 2) \d, {, 2 或 }, 1 或更多发生”。
因此,您的 .NET 正则表达式风格的正则表达式将如下所示:
^(\p{N}{2})([/-])(\p{L}{3}|\p{N}{2})\2(\p{N}{2,4})$
见demo on RegexStorm that supports .NET regex
更通用的版本是^([0-9]{2})([/-])([a-zA-Z]{3}|[0-9]{2})\2([0-9]{2,4})$。
然而,如果你想验证写成字符串的DateTime值,你需要DateTime.TryParseExact它们。这是一个满足您要求的示例:
var fmts = new[] { "dd/MM/yy", "dd/MMM/yyyy", "dd-MM-yy"}; // Allowed formats
DateTime dt;
var valid1 = DateTime.TryParseExact("13/02/15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid2 = DateTime.TryParseExact("10/Apr/2012", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid3 = DateTime.TryParseExact("23-02-10", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// true
var valid4 = DateTime.TryParseExact("01-30-15", fmts, new System.Globalization.CultureInfo("en-us"), System.Globalization.DateTimeStyles.None, out dt);
// false