【问题标题】:Check dateformat with regex in JS在 JS 中使用正则表达式检查日期格式
【发布时间】:2015-06-11 10:48:38
【问题描述】:

我的问题很简单,但需要工作。我尝试了很多正则表达式来检查我的日期时间是否正常,但尽管我确信我的正则表达式是正确的,但它总是返回给我 isnotok with ALERT。你能检查我的代码吗?


validateForLongDateTime('22-03-1981')



function validateForLongDateTime(date){
    var regex=new RegExp("/^\d{2}[.-/]\d{2}[.-/]\d{4}$/");
    var dateOk=regex.test(date);
    if(dateOk){
      alert('ok');

    }else{
        alert('notok');
    }
}


【问题讨论】:

    标签: javascript regex date datetime


    【解决方案1】:

    正则表达式至少有 2 个问题:

    • 它有未转义的正斜杠
    • 字符类中的连字符未转义并形成一个范围(仅匹配./),此处不需要。

    “固定”正则表达式如下所示:

    /^\d{2}[.\/-]\d{2}[.\/-]\d{4}$/
    

    demo

    但是,您无法使用它验证日期,因为它也会匹配 37-67-5734

    这里是my enahanced version,带有一个用于分隔符的字符类:

    ^(?:(?:31([\/.-])(?:0?[13578]|1[02]))\1|(?:(?:29|30)([\/.-])(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29([\/.-])0?2\3(?:(?:(?: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]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
    

    【讨论】:

      【解决方案2】:

      这样您可以验证 1 到 31 和 1 到 12 个月之间的日期

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

      在此处查看此演示 https://regex101.com/r/xP1bD2/1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-09
        • 2012-06-20
        相关资源
        最近更新 更多