dd-MMM-yyyy和dd-MMM的正则表达式?

我需要一个正则表达式来支持日期格式dd-MMM-yyyydd-MMM

例如:

 04-Oct-2010 04-Oct 04-OCT-2010 04-OCT 

虽然您可以使用正则表达式validation格式,但validation日期本身非常困难(甚至不可能)。 要validation格式,您可以使用:

  ^\d\d-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(-\d{4})?$ 

如果您只需要C#解决方案,那么有更优雅的解决方案:

 //I intentionally change to 5th of October var stringDates = new string[] { "05-Oct-2010", "05-Oct", "05-OCT-2010", "05-OCT" }; foreach(var s in stringDates) { DateTime dt; if (DateTime.TryParseExact(s, new string[] { "dd-MMM-yyyy", "dd-MMM" }, null, DateTimeStyles.None, out dt) ) Console.WriteLine(dt.ToShortDateString()); } 

此代码打印:

 05/10/2010 05/10/2010 05/10/2010 05/10/2010 

你甚至可以使用一些花哨的LINQ:

 static DateTime? Parse(string str, string[] patterns) { DateTime result; if (DateTime.TryParseExact(str, patterns, null, DateTimeStyles.None, out result) ) return result; return null; } static void Main(string[] args) { var stringDates = new string[] { "05-Oct-2010", "05-Oct", "05-OCT-2010", "05-OCT" }; var patterns = new string[] {"dd-MMM-yyyy", "dd-MMM"}; var dates = from s in stringDates let dt = Parse(s, patterns) where dt.HasValue select dt.Value; foreach( var d in dates) Console.WriteLine(d.ToShortDateString()); Console.ReadLine(); } 

我们有相同的结果;)

(确保打开不区分大小写的修饰符。)

 ^([012]\d|3[01])-(jan|feb|ma[ry]|apr|ju[nl]|aug|sept?|oct|nov|dec)(?:-(\d{4}))?$ 

请注意,这不会检查31-feb-2009类的无效日期。

您可以将字符串反馈到DateTime.TryParse方法,而不是正则表达式。