【问题标题】:regex to verify UTC date time format正则表达式验证 UTC 日期时间格式
【发布时间】:2014-10-23 10:58:11
【问题描述】:

我想验证日期时间格式,例如“2014-08-29T06:44:03Z”,为此我正在寻找一个正则表达式。

尝试了几种组合,但这些对我不起作用。

【问题讨论】:

    标签: regex date time format


    【解决方案1】:

    试试这个正则表达式

    \b[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z\b
    

    那里:

    \b - 字边界,检查例如 '92014-08-29T06:44:03Z' 是无效的

    [0-9]{n} - 匹配 n 位数字

    如果字符串必须只包含日期时间而不包含其他字符,则使用:

    ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
    

    【讨论】:

      【解决方案2】:

      以下正则表达式接受 ISO-8601 UTC 日期时间字符串,以确保:

      格式:YYYY-MM-DDThh:mm:ssZ
      例如:2016-07-08T12:30:00Z

      地点:
      YYYY = 0000 到 9999
      MM = 01 到 12
      DD = 01 到 31
      hh = 00 到 23
      毫米 = 00 到 59
      ss = 00 到 59

      \d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2]\d|3[0-1])T(?:[0-1]\d|2[0-3]):[0-5]\d:[0-5]\dZ
      

      您可以在这里进行测试:https://regex101.com/r/jE4cE4/1

      【讨论】:

      • 完整单词和可选格式的变体:yyyy-MM-dd HH:mm:ss or, yyyy-MM-dd HH:mm or, yyyy-MM-dd , "T" and "Z " 是可选的。 ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])((T|\s)([0-1]\d|2[0-3]):[0-5]\d(:[0-5]\dZ?)?)?$
      【解决方案3】:

      将@Will Jones 的回答作为对 OP 要求的扩展。这应该匹配可选的本地时间说明符和毫秒,即

      2020-04-20T09:32:28+00:00

      2020-04-20T09:32:28.123Z

      两者都匹配。

      进一步编写正负测试用例:https://regex101.com/r/ufFBTA/2

      \d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2]\d|3[0-1])T(?:[0-1]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+|)(?:Z|(?:\+|\-)(?:\d{2}):?(?:\d{2}))

      【讨论】:

        【解决方案4】:

        rims 答案肯定会起作用,这里还有几个例子。

        更简洁一点:

        \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z
        

        更精确一点:

        \d{4}-[01]{1}\d{1}-[0-3]{1}\d{1}T[0-2]{1}\d{1}:[0-6]{1}\d{1}:[0-6]{1}\d{1}Z
        

        当然,您可以编写更高级的表达式,这些表达式比使用前向和后向引用更有效,以真正确保您对允许的组合等进行 100% 验证的匹配...

        【讨论】:

          猜你喜欢
          • 2014-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多