【问题标题】:Regex expression for M/d/yyyyM/d/yyyy 的正则表达式
【发布时间】:2012-11-16 22:31:19
【问题描述】:

我的字符串格式是 M/d/yyyy。这意味着月份和日期数字前面不会有零。 例如:2012 年 9 月 23 日、2012 年 7 月 9 日等

我试过了:

^((((0?[1-9]|[12]\d|3[01]).-/.-/)|((0?[1-9]|[12]\d |30).-/.-/)|((0?[1-9]|1\d|2[0-8])[.-/]0?2.-/)|(29[.- /]0?2.-/))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9 ]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1 [6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6- 9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][ 048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$

但我想这是为 d/M/yyyy 准备的。

有人知道 M/d/yyyy 的表达式吗?

【问题讨论】:

标签: c# regex


【解决方案1】:

如果您尝试验证日期格式是否为M/d/yyyy,那么DateTime.TryParseExact 是比正则表达式更好的解决方案。就像是。

string str = "9/23/2012";
DateTime dt;
if(DateTime.TryParseExact(str,
                          "M/d/yyyy",
                          CultureInfo.InvariantCulture,
                          DateTimeStyles.None, 
                          out dt))
{
    //valid date
}
else
{
    //Invalid date
}

【讨论】:

    【解决方案2】:

    尝试使用这种表达方式

    ^((0[1-9])|(1[0-2])|[1-9])/(([1-9])|(0[1-9])|(1 [0-9])|(2[0-9])|(3[0-1]))/(([0-9]{2})|([1-9][0-9]{ 3}))$

    您可以通过this site找到更多信息

    【讨论】:

    • 嗨 Rustem,答案应该不仅仅是指向外部站点的链接。如果该页面被重新定位或站点消失了怎么办?你至少应该引用你在那里找到的合适的正则表达式(当然仍然链接到它的源)。如果您可以在那里找到合适的正则表达式。
    • 谢谢!但是,该正则表达式非常糟糕。它允许像 0.0.0000 这样的日期,并且不允许像 09/15/2012 这样的日期...
    【解决方案3】:

    感谢大家的回复,你们都帮了我。我的 qns 的表达式是:

    ^([0]?[1-9]|[1][0-2])[./-]([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0-9]{4}|[0-9]{2})$
    

    【讨论】:

    • 这不起作用。尝试使用字符串01.|0/0000。当然还有各种无效日期,例如2/31/9999
    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多