我正在尝试用C#验证日期。
我需要检查以下格式:
TreeMap
以下表达式抛出异常:
Map
请指出表达式中的错误。
答案 0 :(得分:2)
^(\d{2})([\/-])(\w{3}|\d{2})\2(\d{2,4})$
猜猜你需要这个。
`^(*`
^^
这个量词给出了错误,因为它无法量化。
参见演示。
答案 1 :(得分:1)
回答关于正则表达式的问题,有几个问题。
(*
的问题(已由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