使用javascript正则表达式验证日期时出现问题
我试图使用javascript正则表达式验证日期输入,但它将有效日期返回为无效日期。我不是正则表达式专家,所以我不知道它有什么问题:使用javascript正则表达式验证日期时出现问题,javascript,regex,date,validation,Javascript,Regex,Date,Validation,我试图使用javascript正则表达式验证日期输入,但它将有效日期返回为无效日期。我不是正则表达式专家,所以我不知道它有什么问题: /^([0-9]d{2})+(\.|-|\/)+([0-9]d{2})+(\.|-|\/)+([0-9]d{4})+$/ 我希望接受这些日期格式: 23/04/2001 23-04-2001 23.04.2001 最初我有这个,但它是接受日期与其他字符的结尾,如23/04/2001jhsdgf: /\d{2}(\.|-|\/)\d{2}(\.|-|\/)\d{4
/^([0-9]d{2})+(\.|-|\/)+([0-9]d{2})+(\.|-|\/)+([0-9]d{4})+$/
我希望接受这些日期格式:
23/04/2001
23-04-2001
23.04.2001
最初我有这个,但它是接受日期与其他字符的结尾,如23/04/2001jhsdgf:
/\d{2}(\.|-|\/)\d{2}(\.|-|\/)\d{4}/;
使用原始正则表达式,只需将新正则表达式中的^和$添加到其中。问题解决了 编辑:虽然,实际上,\.\-\/是一团乱,应该是[.\/-]
编辑2:也就是说,如果您创建第一个[.\/-],那么您可以将第二个替换为\1,然后它将要求两个分隔符相同。您可以使用这样的正则表达式检查日期的语法是否正确:
/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/
^和$分别匹配字符串的开头和结尾
\d{1,2}匹配1或2个数字
\d{4}正好匹配4位数字
\2匹配在第二个捕获组中捕获的字符串-/
如果匹配,则可以使用匹配的日期、月份和年份构建新日期,并将结果日期、月份和年份与匹配的值进行比较。下面是一个函数,它的作用就是:
function checkDate(dateText) {
var match = dateText.match(/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/);
// "31.04.2012" -> ["31.04.2012", "31", ".", "04", "2012"]
if (match === null) {
return false;
}
var date = new Date(+match[4], +match[3] - 1, +match[1]);
return date.getFullYear() == +match[4] &&
date.getMonth() == +match[3] - 1 &&
date.getDate() == +match[1];
}
checkDate("30.04.2013"); // true
checkDate("31-04-2013"); // false (April has 30 days)
+用于将字符串转换为数字+01变为1
月份以0为基础,0=一月,1=二月。。。
上面的示例假设日期为dd-mm-yyy格式
对象尝试更正无效日期。尝试创建日期(如2013年4月31日)将产生2013年5月1日,上述函数将结果日期与输入参数进行比较,以检查有效性。好的,我的原始正则表达式不也允许字母吗?如何仅指定数字并使其正常工作?\d表示任何数字。它只允许数字。啊,我明白了!谢谢,效果很好!一个简单的正则表达式检查是不够的。00-00-0000与您的正则表达式匹配。这是非常正确的,您建议我如何确保它是实际日期?99/99/9999也会匹配。我已经添加了我的答案。日期看起来像英国日期,您可能想从分隔符列表中省略/。谢谢,这帮助我更好地理解事情!为了方便用户和减少验证的需要,我决定使用jQueryUIDatePicker并禁用输入上的按键。似乎很管用。谢谢你的帮助,我很感激。不客气。您可以将输入设置为只读。对于验证:mm/dd/yyyy