在JS中使用regex检查dateformat

时间:2015-06-11 10:48:38

标签: javascript regex date datetime

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


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');
    }
}


2 个答案:

答案 0 :(得分:2)

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

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

enter image description here

"固定"正则表达式看起来像:

/^\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})$

答案 1 :(得分:0)

通过这种方式,您可以验证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