【问题标题】:How do I determine if a string is date format?如何确定字符串是否为日期格式?
【发布时间】:2012-02-29 23:05:45
【问题描述】:

我有一些这样的字符串:2012-02-05T07:42:47.000Z 与其他字符串混合。它总是采用这种格式。 (但数字不一样,当然……时代不同) (不是Sun, 05 Feb 2012 07:42:47 GMT

我想知道一个字符串是否与该格式匹配。我怎样才能确定呢?冒号和点之类的东西太复杂了。

【问题讨论】:

  • 没有正则表达式就没有办法直接解析成Java吗?使用正则表达式,您知道它是否是日期,但如果您还需要该值,我应该检查一些日期解析器函数。

标签: javascript regex string datetime date


【解决方案1】:

正则表达式[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}Z

【讨论】:

    【解决方案2】:

    !isNaN(+new Date(s)) 的那些?

    【讨论】:

    • 只是“这个字符串被内置日期接受为日期字符串”的浓缩黑魔法。
    【解决方案3】:

    尝试使用以下正则表达式匹配:

    var pattern = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/;
    var d = "2012-02-05T07:42:47.000Z";
    if(d.match(pattern) !== null){
        //success
    } else {
        //failed
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用 Date.parse( your_string ) 并检查结果。与正则表达式不同,这将检查任何允许的日期格式。 http://www.w3schools.com/jsref/jsref_parse.asp

      刚刚意识到您的字符串始终采用给定的格式,与正则表达式不同的是,该函数将检查日/月/年是否正确等。所以可能进行 2 次检查:第一次检查字符串格式,第二次检查数字是否正确。

      【讨论】:

        【解决方案5】:

        用#号替换所有数字,使“2012-02-05T07:42:47.000Z”看起来像“####-##-##T##:##:##.### Z" 那么你可以直接进行字符串搜索。

        我使用这种技术在一大段文档文本中查找社会保险号,我将所有数字转换为 # 符号,我只需要查找 ###-##-#### 字符串即可

        【讨论】:

          【解决方案6】:

          对于它的价值,您可以使用moment.js 来执行此操作。

          var check1 = "2012-02-05T07:42:47.000Z";
          alert(moment(check1));
          //Sat Feb 04 2012 23:42:47 GMT-0800
          
          var check2 = "201-02-05T07:42:47.000Z";
          alert(moment(check2));
          //Invalid date
          

          在这里玩一下:http://jsfiddle.net/remus/KFjZF/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-10-16
            • 1970-01-01
            • 1970-01-01
            • 2018-08-30
            • 2011-10-06
            • 1970-01-01
            相关资源
            最近更新 更多