使用正则表达式验证日期

时间:2015-11-20 22:30:11

标签: javascript regex

我正在尝试构建一个正则表达式,如果它符合以下格式(11-2-07,1-25-2007或01/25/2007),则会检查日期。我的正则表达式如下所示:

/^([\d{2}\d{1}])([\-\/])([\d{2}\d{1}])(\-\/)([\d{2}\d{4}])$/

当我以所需格式在日期中输入日期时,方法test()实际上返回false。你能帮我找到错误吗?

2 个答案:

答案 0 :(得分:1)

  1. 您可以使用\d{1,2}选择1位或2位数字。

  2. 上一个超级/正斜杠组中缺少方括号。

  3. 最后一组应为(\d{2}|\d{4})

  4. 无需转义字符类中的正斜杠。

    /^(\d{1,2})([\-/])(\d{1,2})([\-/])(\d{2}|\d{4})$/
    

答案 1 :(得分:1)

试试这个:

var re = /^([0123]?[\d])([\-\/])([0123]?[\d])([\-\/])((19|20)?\d\d)$/;
  1. 第一组和第三组匹配日期和月份,只能从0123开始。如果您知道确切的日期格式,则可以从月份组中删除3,或者将(0?[1-9]|1[012])用于月份组,将(0?[1-9]|[12][0-9]|3[01])用于日期组。
  2. 第二组和第四组匹配连字符和斜杠分隔符。
  3. 最后一组与从1920开始的年份匹配。
  4. var re = /^([0123]?[\d])([\-\/])([0123]?[\d])([\-\/])((19|20)?\d\d)$/;
    
    console.log('01-02-1999', re.test('01-02-1999'));
    console.log('01/02/1999', re.test('01/02/1999'));
    console.log('41-02-1999', re.test('41-02-1999'));
    console.log('01/42/1999', re.test('01/42/1999'));