使用 JQuery Validate 以“mm-dd-yyyy”和“mm/dd/yyyy”格式验证日期
Posted
技术标签:
【中文标题】使用 JQuery Validate 以“mm-dd-yyyy”和“mm/dd/yyyy”格式验证日期【英文标题】:Validate date in both 'mm-dd-yyyy' and 'mm/dd/yyyy' formats using JQuery Validate 【发布时间】:2017-04-07 08:29:20 【问题描述】:使用 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 = /^(\d1,2)\/(\d1,2)\/(\d4)$/;
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;
);
【问题讨论】:
【参考方案1】:您可以将您支持的日期格式放入一个数组中并循环使用。例如这样的函数:
function isValidDate(input)
var regexes = [
/^(\d1,2)\/(\d1,2)\/(\d4)$/,
/^(\d1,2)\-(\d1,2)\-(\d4)$/
];
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');
);
【讨论】:
【参考方案2】:您可以检查两个我怀疑您可能一直试图避免的正则表达式。
var input=$(this).val();
var r1 = /^(\d1,2)\/(\d1,2)\/(\d4)$/;
var r2 = /^(\d1,2)-(\d1,2)-(\d4)$/;
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');
【讨论】:
【参考方案3】:如果您不担心将混合分隔符(例如 dd-mm/yyyy)视为有效,那么最简单的方法可能是在您的正则表达式中使用 [\-\/]
而不是 \/
:
var r = /^(\d1,2)[\-\/](\d1,2)[\-\/](\d4)$/;
【讨论】:
以上是关于使用 JQuery Validate 以“mm-dd-yyyy”和“mm/dd/yyyy”格式验证日期的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Validate:在 ASP.NET MVC 5 应用程序中添加事件以提交按钮单击
jQuery validate:如何为正则表达式验证添加规则?