使用JQuery Validate以'mm-dd-yyyy'和'mm / dd / yyyy'格式验证日期。
我尝试使用一种格式的代码,但是,我的代码(如下所示)不适用于'mm-dd-yyyy'和'mm / dd / yyyy'格式。 我的代码:
$(document).on('blur','.dateValidation',function(){
var input=$(this).val();
var r = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
if(!r.test(input)) {
alert("Invalid Input");
return;
}
var a = input.match(r), d = new Date(a[3],a[1] - 1,a[2]);
if(d.getFullYear() != a[3] || d.getMonth() + 1 != a[1] || d.getDate() != a[2]) {
alert("Invalid Date");
return;
}
});
答案 0 :(得分:1)
您可以在数组中添加您支持的日期格式并在其上循环。例如,使用这样的函数:
function isValidDate(input) {
var regexes = [
/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/,
/^(\d{1,2})\-(\d{1,2})\-(\d{4})$/
];
for (var i = 0; i < regexes.length; i++) {
var r = regexes[i];
if(!r.test(input)) {
continue;
}
var a = input.match(r), d = new Date(a[3],a[1] - 1,a[2]);
if(d.getFullYear() != a[3] || d.getMonth() + 1 != a[1] || d.getDate() != a[2]) {
continue;
}
// All checks passed:
return true;
}
return false;
}
然后你可以从代码中调用它:
$(document).on('blur','.dateValidation',function(){
var isValid = isValidDate($(this).val());
if (isValid) {
alert('Valid date');
} else {
alert('Invalid date');
}
});
答案 1 :(得分:0)
你可以检查我怀疑你可能试图避免的两个正则表达式。
var input=$(this).val();
var r1 = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var r2 = /^(\d{1,2})-(\d{1,2})-(\d{4})$/;
var a;
if (r1.test(input)) {
a = input.match(r1);
} else if (r2.test(input) {
a = input.match(r2);
} else {
alert("Invalid Input");
return;
}
var d = new Date(a[3],a[1] - 1,a[2]);
if (d.getFullYear() != a[3] ||
d.getMonth() + 1 != a[1] ||
d.getDate() != a[2]) {
alert("Invalid Date");
return;
}
如果您愿意使用外部js库。我会使用Moment.js。
var d = moment($(this).val(), ["D-M-YYYY", "D/M/YYYY"], true);
if(d == null || !d.isValid()) {
alert('Invalid Date');
}
答案 2 :(得分:0)
如果您不担心将混合分隔符(例如dd-mm / yyyy)视为有效,那么最简单的方法可能是在您的正则表达式中使用[\-\/]
而不是\/
:
var r = /^(\d{1,2})[\-\/](\d{1,2})[\-\/](\d{4})$/;