【问题标题】:Regular Expression for dd-MMM-yyyy and dd-MMM?dd-MMM-yyyy 和 dd-MMM 的正则表达式?
【发布时间】:2010-10-04 19:23:45
【问题描述】:

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

例如:

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

【问题讨论】:

  • 为什么同时标记 C# 和 Java?
  • 你只支持英语文化吗?
  • .NET 和 Java 支持各种解析(从而验证)日期字符串的方法。那么,在这种情况下是否需要正则表达式? (我问是因为您可能不知道内置功能)

标签: c# java asp.net regex


【解决方案1】:

如果您只需要 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();
}

我们得到相同的结果;)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        相关资源
        最近更新 更多