我需要帮助验证当前日期的输入值。基本上我需要为jquery验证插件“addMethod”,这需要CC Exp Date - 格式MM / YYYY将来不超过10年的未来日期。我一直在寻找2天,还没有找到一个好的解决方案!请帮助!
答案 0 :(得分:2)
你可以尝试类似的东西:
$.validator.addMethod('ccDate', function (value) {
var inDate = new Date(value);
var futureDate = new Date();
futureDate.setYear(futureDate.getFullYear() + 10);
var diff = inDate - futureDate;
return (diff < 0);
}, function() {
var $msg = 'Date must be within 10 years';
return $msg;
});
然后只需在验证调用的规则部分中为此字段添加对此新类型(ccDate)的调用。您可能需要调整如何解析字段的值以创建正确的日期,但这个想法就在这里。
答案 1 :(得分:1)
我对代码做了一些修改。我认为以下解决方案将用于验证信用卡到期日期。它允许m / yy或m / yyyy格式表示有效期。
$.validator.addMethod(
"ccexpdate",
function (value, element) {
// Initialize todays date i.e start date
var today = new Date();
var startDate = new Date(today.getFullYear(),today.getMonth(),1,0,0,0,0);
// Initialize End/Expiry date i.e. adding 10 years to expire
var futureLimitDate= new Date(today.getFullYear()+10,today.getMonth(),1,0,0,0,0);
var expDate = value;
var expYearCheck='';
// Check Date format
var separatorIndex = expDate.indexOf('/');
if(separatorIndex==-1)return false; // Return false if no / found
var expDateArr=expDate.split('/');
if(expDateArr.length>2)return false; // Return false if no num/num format found
// Check Month for validity
if(eval(expDateArr[0])<1||eval(expDateArr[0])>12)
{
//If month is not valid i.e not in range 1-12
return false;
}
//Check Year for format YY or YYYY
switch(expDateArr[1].length)
{
case 2:expYearCheck=2000+parseInt(expDateArr[1], 10);break; // If YY format convert it to 20YY to it
case 4:expYearCheck=expDateArr[1];break; // If YYYY format assign it to check Year Var
default:return false;break;
}
// Calculated new exp Date for ja
expDate=new Date(eval(expYearCheck),(eval(expDateArr[0])-1),1,0,0,0,0);
if(Date.parse(startDate) <= Date.parse(expDate))
{
if(Date.parse(expDate) <= Date.parse(futureLimitDate))
{
// Date validated
return true;
}else
{
// Date exceeds future date
return false;
}
}else
{
// Date is earlier than todays date
return false;
}
},
"Must be a valid Expiration Date."
);
答案 2 :(得分:0)
在帕特里克的帮助下,这项工作也有希望帮助其他人,对于一个不太优秀的程序员来说,这是一个痛苦的事。
$.validator.addMethod(
"Future",
function (value, element) {
var today = new Date();
var startDate = new Date(today.getFullYear(),today.getMonth(),1,0,0,0,0);
var expDate = value;
var separatorIndex = expDate.indexOf('/');
expDate = expDate.substr( 0, separatorIndex ) + '/1' + expDate.substr( separatorIndex );
return Date.parse(startDate) <= Date.parse(expDate);
},
"Must be a valid Expiration Date."
);
then in rules: {
elementName: {
Future: true
}
},
messages: {
}
答案 3 :(得分:0)
答案在底部: http://forum.jquery.com/topic/credit-card-expiration-check
简短说明:此链接代码假设您的年份值为四位数。如果您的年份值是两位数,那么您需要将它们转换为四位数。只要在适当的地方使用以下行,一切都应该是好的。
var year = 2000+parseInt($year.val(), 10);