如何使用jQuery验证信用卡exp日期

时间:2010-07-12 18:40:18

标签: jquery validation

我需要帮助验证当前日期的输入值。基本上我需要为jquery验证插件“addMethod”,这需要CC Exp Date - 格式MM / YYYY将来不超过10年的未来日期。我一直在寻找2天,还没有找到一个好的解决方案!请帮助!

4 个答案:

答案 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);