使用正则表达式进行日期验证

3

我正在尝试构建一个正则表达式,用于检查日期是否符合以下格式(11-2-07、1-25-2007或01/25/2007)。我的正则表达式如下:

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

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


[\d{2}\d{1}][\d{2}\d{4}]只匹配一个字符,您是否想使用(a|b)?此外,您提供的第一个有效日期示例没有足够的信息来确定日期和月份的顺序。 - Paul S.
1
你考虑过使用moment.js吗?它有一个isValid()函数。 - Jared Dykstra
1
简单的方法:忘记使用正则表达式,直接使用Date.parse() - Andrew Morton
1
如果你想构建正则表达式 - 使用这个网站来尝试 https://regex101.com/ 这样你就可以边构建边测试你的正则表达式。 - Nur Bar
2个回答

2
试试这个:
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开头的年份。

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


1
  1. You can select 1 or 2 digit occurrences with \d{1,2}.

  2. There are missing square brackets in the last hypen / forward slash group.

  3. And the last group should be (\d{2}|\d{4}).

  4. No need to escape the forward slash inside the character classes.

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接