【问题标题】:C# Regular Expression to validate a date?C# 正则表达式来验证日期?
【发布时间】:2010-11-24 10:57:47
【问题描述】:

我正在尝试验证输入到文本框中的日期。文本框上有一个输入掩码,强制输入 xx/xx/xxxx。我正在尝试使用正则表达式验证器来强制输入正确的日期。我根本不擅长RegEx。我的同事在互联网上找到了这个,但我真的不知道它在做什么。

这看起来对吗?好像太复杂了……

(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)

有谁知道基本上可以满足我需要的不太复杂的表达式?

【问题讨论】:

  • 这已在this 帖子中得到解决。看看有没有帮助。

标签: c# regex validation date


【解决方案1】:

为什么不使用System.DateTime namespace 中提供的一种方法?您可以使用 DateTime.TryParse()edit: DateTime.TryParseExact() 可能是正确的建议)来完成验证。

【讨论】:

  • 而 DateTime.TryParseExact() 可能更合适,具体取决于您的具体需求。
  • 如果我想在按钮单击时确保日期正确,该怎么办?
  • +1 不要重新发明轮子。此外,正则表达式不应用于验证字符串的解析值,而应仅用于验证字符串的form,以确保您可以解析它。如果它解析正确的模式,则不需要TryParse
【解决方案2】:

你可以使用DateTime.TryParseExact:

DateTime dt;

bool isValid = DateTime.TryParseExact(
    "08/30/2009",
    "MM/dd/yyyy",
    CultureInfo.InvariantCulture,
    DateTimeStyles.None,
    out dt);

【讨论】:

    【解决方案3】:

    这是用于日期格式 dd/mm/yyyy 的正确正则表达式

    ^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$
    

    【讨论】:

    • 不完全正确 - 您需要将初始零设为可选,否则它将与 2012 年 2 月 12 日这样的一位数日值不匹配。 ^(0?[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19| 20)\d\d$
    【解决方案4】:

    上面的正则表达式对于dd/mm/yyyy格式是正确的。表达式是

    (^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)
    

    【讨论】:

      【解决方案5】:

      作为替代方案,您可以使用 CompareValidator 代替 RegularExpressionValidator。它是这样的:

      <asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtIssueDate" ErrorMessage="Invalid Date Format" Type="Date" Operator="DataTypeCheck" Display="Dynamic" Text="*" ForeColor="Red" ValidationGroup="valGroup1"></asp:CompareValidator>

      【讨论】:

        【解决方案6】:

        Kettenbach 遇到了问题。 他的同事建议使用正则表达式。 然后,Kettenbach 遇到了两个问题。

        正如其他人所说,在自定义验证器上使用 DateTime.TryParseDateTime.TryParseExact 并避免正则表达式的噩梦 :)

        【讨论】:

        • 正则表达式本身并不是邪恶的。不过,它们需要谨慎使用。它们非常适用于特定类别的文本解析问题。
        • 哦,我从来没有说过它们是邪恶的,每个人说...但它们与猫处于同一水平。
        • 请将上述声明归于 Jamie Zawinski。
        【解决方案7】:

        最后一个答案实际上是正确的做法。使用DateTime.TryParse

        例子:

        DateTime dt;
        if(DateTime.TryParse(Textbox1.Text,out dt))
        {
         Label1.Text = "Invalid date format";
        }
        

        【讨论】:

        • 如果解析成功,TryParse 实际上会返回 true,因此您对无效日期格式的通知应该处于该条件的 else 中。
        【解决方案8】:

        这不是一个真正的答案,但您不能使用DateTime.ParseDateTime.TryParse 来检查日期是否正确?

        或者使用DateTime 控件来确保无法输入不是日期时间的数据。有很多关于这个主题的 JavaScript。

        【讨论】:

          【解决方案9】:

          我们可以使用 CustomValidator 并使用重写 ServerValidate 方法来检查 TryParse!

          【讨论】:

            【解决方案10】:
            ([0][1-9]|[1][0-9|][2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/[1-2][0-9][0-9][0-9]
            

            对于 dd/mm/yyyy(年份可以从 1000 到 2999)

            (([0][1-9]|[2][0-9]|[3][0-1]|[1-9]|[1][0-9])/([ 0][1-9]|[1][0-2]|[1-9])/([1-2][0-9][0-9][0-9]|[0-9 ][0-9]))

            其中包括 d/m/yy(例如 1/12/82)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-06-22
              • 2011-05-16
              • 2013-04-22
              • 1970-01-01
              • 1970-01-01
              • 2014-03-22
              • 1970-01-01
              相关资源
              最近更新 更多