YYYYMMDD日期格式正则表达式来验证C#中的日期.net

问题描述:

我需要在C#中使用正则表达式验证日期格式。YYYYMMDD日期格式正则表达式来验证C#中的日期.net

下面是格式:"YYYYMMDD"

正则表达式是不适合这个任务。例如,编写一个与有效日期“20080229”相匹配而不是无效日期“20100229”的正则表达式很难。

取而代之,您应该使用DateTime.TryParseExact,格式字符串为"yyyyMMdd"。以下是一个示例:

string s = "20100229"; 
DateTime result; 
if (!DateTime.TryParseExact(
    s, 
    "yyyyMMdd", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal, 
    out result)) 
{ 
    Console.WriteLine("Invalid date entered."); 
}; 

考虑使用DateTime.TryParseExact来验证日期。 您可以使用该方法同时验证并读取DateTime值。

例如:

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

好吧,这是最漂亮的正则表达式我曾经构建过。这占了1582年以来的所有闰年,引入了飞跃。它每四个世纪也处理非飞跃。例如,1600是飞跃,但1700不是,但它可以被四整除。我使用破折号

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])))))$"); 

我爱这适用于几乎所有的语言,只要他们支持正则表达式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])))))$"); 

另一个版本之间测试了所有日子。尽管使用语言特定的日期解析器更合理,但我认为这显示了正则表达式的强大和优雅。

这是一个image与Regexper斜杠模式,如果你想看到它。