【发布时间】:2011-11-10 16:19:57
【问题描述】:
我在一个正则表达式示例站点中发现了一个非常有用的正则表达式,用于测试日期字段的格式和内容
但是当我输入早于 2000 年的日期时,我得到了验证,因为这是一个用于输入出生日期的字段,您可以看到为什么会出现问题。我确信这很容易解决,但正则表达式让我感到害怕。
$('#txtDOB').blur(function() {
//$('span.error-keyup-5').remove();
var inputVal = $(this).val();
var dateReg = /^[0,1]?\d{1}\/(([0-2]?\d{1})|([3][0,1]{1}))\/(([1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))$/;
if(!dateReg.test(inputVal)) {
alert('invalid date format: ' + inputVal);
}
我不同意这个解决方案,所以如果你能提出更好的方法,请发表评论。
【问题讨论】:
-
正则表达式不是日期验证的首选工具(请参阅here为什么不)。他们可以检查“可能是日期的东西”,但如果您需要考虑日期范围、月份长度、闰年等,最好使用date parser。
-
这不是一个特别好的正则表达式,但我可以为你找到一个(特别是众多
{1}毫无意义) -
为什么不直接创建一个 javascript 日期对象并使用它的原生函数?
-
您的 RegEx 不能使用的日期是什么?看起来它应该接受 2000 年之后的日期。见 - jsfiddle.net/GGM6h
-
@ipr101 - 例如,该正则表达式声称 2100 年 2 月 29 日是有效的,但实际上并非如此。 (2100 年不是闰年。)
标签: javascript jquery regex