YYYYMMDD Date格式正则表达式,用于验证C#.net中的日期

YYYYMMDD Date格式正则表达式,用于验证C#.net中的日期,c#,.net,regex,C#,.net,Regex,我需要使用C#中的正则表达式验证日期格式 以下是格式:“YYYYMMDD”正则表达式不适合此任务。例如,很难编写与有效日期“20080229”匹配但与无效日期“20100229”不匹配的正则表达式 相反,您应该使用格式字符串“yyyyMMdd”。以下是一个例子: string s = "20100229"; DateTime result; if (!DateTime.TryParseExact( s, "yyyyMMdd", CultureInfo.Invaria

我需要使用C#中的正则表达式验证日期格式


以下是格式:
“YYYYMMDD”

正则表达式不适合此任务。例如,很难编写与有效日期“20080229”匹配但与无效日期“20100229”不匹配的正则表达式

相反,您应该使用格式字符串
“yyyyMMdd”
。以下是一个例子:

string s = "20100229";
DateTime result;
if (!DateTime.TryParseExact(
     s,
     "yyyyMMdd",
     CultureInfo.InvariantCulture,
     DateTimeStyles.AssumeUniversal,
     out result))
{
    Console.WriteLine("Invalid date entered.");
};
考虑使用来验证日期。 您可以使用该方法同时验证和读取DateTime值

例如:

DateTime dateValue;
if (DateTime.TryParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
{
 //Parsed Successfully   
}

好的,这是我做过的最漂亮的正则表达式。这是自1582年引入leap以来的所有闰年。每四世纪它还处理非leap。例如,1600是闰,但1700不是,尽管它可以被四整除。我在1582年到9999年间的所有日子里都测试过这个

var yyyymmdd = new RegExp("^(?:(?:(?:(?:(?:[13579][26]|[2468][048])00)|(?:[0-9]{2}(?:(?:[13579][26])|(?:[2468][048]|0[48]))))(?:(?:(?:09|04|06|11)(?:0[1-9]|1[0-9]|2[0-9]|30))|(?:(?:01|03|05|07|08|10|12)(?:0[1-9]|1[0-9]|2[0-9]|3[01]))|(?:02(?:0[1-9]|1[0-9]|2[0-9]))))|(?:[0-9]{4}(?:(?:(?:09|04|06|11)(?:0[1-9]|1[0-9]|2[0-9]|30))|(?:(?:01|03|05|07|08|10|12)(?:0[1-9]|1[0-9]|2[0-9]|3[01]))|(?:02(?:[01][0-9]|2[0-8])))))$");
另一个版本使用破折号

var yyyyDashMmDashDd = new RegExp("^(?:(?:(?:(?:(?:[13579][26]|[2468][048])00)|(?:[0-9]{2}(?:(?:[13579][26])|(?:[2468][048]|0[48]))))-(?:(?:(?:09|04|06|11)-(?:0[1-9]|1[0-9]|2[0-9]|30))|(?:(?:01|03|05|07|08|10|12)-(?:0[1-9]|1[0-9]|2[0-9]|3[01]))|(?:02-(?:0[1-9]|1[0-9]|2[0-9]))))|(?:[0-9]{4}-(?:(?:(?:09|04|06|11)-(?:0[1-9]|1[0-9]|2[0-9]|30))|(?:(?:01|03|05|07|08|10|12)-(?:0[1-9]|1[0-9]|2[0-9]|3[01]))|(?:02-(?:[01][0-9]|2[0-8])))))$");
我喜欢这几乎适用于所有语言,只要它们支持正则表达式。虽然使用特定于语言的日期解析器可能更明智,但我认为这显示了正则表达式的强大和优雅

如果您想查看,下面是Regexper中带有斜杠的模式的示例