【问题标题】:Regular expression for date time format "MM/DD/YY HH:mm:ss AM/PM" in asp.net regular expression validatorasp.net正则表达式验证器中日期时间格式“MM/DD/YY HH:mm:ss AM/PM”的正则表达式
【发布时间】:2010-11-21 20:53:45
【问题描述】:

谁能告诉我“MM/DD/YY HH:mm:ss AM/PM”的正则表达式格式,以便在 asp.net 2.0 中的正则表达式验证器中使用它

【问题讨论】:

    标签: asp.net regex datetime validation


    【解决方案1】:

    我强烈建议您不要为此使用正则表达式。相反,您应该创建自己的验证器(继承 BaseValidator)并使用 DateTime.TryParseExact 检查该值是否可以转换为 DateTime。

    【讨论】:

    • 但是我想在客户端验证这个,我不应该去服务器端验证。还有一件事是如果我使用客户端点击按钮,所有其他必需的验证器都不起作用。请建议
    【解决方案2】:

    这对我有用

    ^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$
    

    Source of regex

    【讨论】:

    • 这对我也很有效,尽管经过 4 年的发布后它有很大帮助。
    【解决方案3】:

    老问题,但经常被问到。

    用于匹配所有日期的正则表达式,包括闰年。

    适用于 DD-MM-YYYY 格式

    ^(?:31#(?:(?:0[13578])|(?:1[02]))#)|(?:(?:29|30)#(?:(?:0[1,3-9])|(?:1[0-2]))#)(?:(?:1[6-9]|[2-9]\d)\d{2})$|^(?:29#02#(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0[1-9])|(?:1\d)|(?:2[0-8]))#(?:(?:0[1-9])|(?:1[0-2]))#(?:(?:1[6-9]|[2-9]\d)\d{2})$
    

    对于 MM-DD-YYYY 格式

    ^(?:(?:(?:0?[13578]|1[02])#31)\1|(?:(?:0?[1,3-9]|1[0-2])#(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2#29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))#(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
    

    请用您想要的日期分隔符更改正则表达式中的#。对于全局分隔符,将 # 替换为 (/|-|.)

    RegEx 针对以下日期进行了测试并成功运行。还列出了性能。

    29-02-2000 ---> true
    millis 2
    29-02-2006 ---> false
    millis 0
    29-02-2001 ---> false
    millis 0
    30-02-2000 ---> false
    millis 0
    31-11-2000 ---> false
    millis 0
    29-13-2000 ---> false
    millis 0
    31-11-2000 ---> false
    millis 0
    31-07-2000 ---> true
    millis 0
    31-08-2000 ---> true
    millis 1
    31-12-2000 ---> true
    millis 0
    30-11-2011 ---> true
    millis 0
    17-07-2011 ---> true
    millis 0
    04-10-1987 ---> true
    millis 0
    01-01-1900 ---> true
    millis 0
    24-05-88 ---> false
    millis 0
    24-05-88 ---> false
    millis 0
    29-12-2011 ---> true
    millis 0
    31-12-2000 ---> true
    millis 0
    1-1-2010 ---> false
    millis 0
    1-1-99 ---> false
    millis 0
    1-01-99 ---> false
    millis 0
    01-1-99 ---> false
    millis 0
    

    【讨论】:

      【解决方案4】:

      对于客户端 (JavaScript) 验证,您可以使用

      ^\d\d/\d\d/\d\d \d\d:\d\d:\d\d [AP]M$
      

      它将根据您的规范检查语法(数字、空格、分隔符),严格。如果获得匹配,则需要检查返回匹配的子组中输入的值的范围(例如 1

      使用this site 测试正则表达式。

      【讨论】:

        【解决方案5】:
             (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d
        

        格式为 MM-DD-YYYY

        【讨论】:

          【解决方案6】:

          检查这个。它还验证闰年。

          ^(((0[13578]|1[02])[\/\.-](0[1-9]|[12]\d|3[01])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((0[13456789]|1[012])[\/\.-](0[1-9]|[12]\d|30)[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](0[1-9]|1\d|2[0-8])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](29)[\/\.-]((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm)))$
          
          06/12/2014 12:45:56 AM // true
          11-12-1965 06:04:34 PM // true
          11/31/2015 11:40:00 AM // false
          12-31-1945 01:38:09 PM // true
          02/29/2012 09:04:10 AM // true [leap year]
          02/29/2013 09:04:10 AM // false
          06.12.2014 13:04:10 AM // false
          

          Demo

          【讨论】:

            【解决方案7】:

            你可以试试这个

            (0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/\d\d (0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9]) [AM|PM]
            

            希望它能解决你的问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-11-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-04-09
              相关资源
              最近更新 更多