0

以下代码工作正常。我只想分别验证信用卡的月份和年份(mm/yyyy)。

问题是下面的代码应该考虑到当前日期是什么。例如,如果您输入 05/2013,下面的代码会接受它并提交表单,但从逻辑上讲,日期 05/2013 已过期,因此它应该显示一条消息,说明信用卡日期已过期。

换句话说,验证应该通过当前或未来的日期,而不是过去的日期。

    <script type="text/javascript">
    function validate(payment_form){
    var error="";

    if(payment_form.credit_card_exp.value.length==0){
    document.getElementById("credit_card_exp_error").innerHTML="Enter Credit Card Expiry Date";
    error+= false;
    }else{
    var datereg = /^(0[1-9]|1[012])[- /.](19|20)\d\d+$/;
    if (!datereg.test(payment_form.credit_card_exp.value)) {
    document.getElementById("credit_card_exp_error").innerHTML="Enter valid Date";
    error+= false;
    }
    else{
    document.getElementById("credit_card_exp_error").innerHTML="";
    error+= "";
    }
    }
    if(error==""){
    return true;
    }
    else{
    return false;
    }
    }

    function IsNumeric(strString)
    {
    var strValidChars = "0123456789.-";
    var strChar;
    var blnResult = true;
    if (strString.length == 0) return false;
    for (i = 0; i < strString.length && blnResult == true; i++)
    {
    strChar = strString.charAt(i);
    if (strValidChars.indexOf(strChar) == -1)
    {
    blnResult = false;
    }
    }
    return blnResult;
    }
    </script>


    <form id='payment-form' name="payment_form" onSubmit="return validate(this)" action='response.php' method='POST'>
    <table border="0" cellpadding="0" cellspacing="0" style="font-size:12px;">
    <tr>
    <td valign="top" align="left">Credit Card Expiry (mm/yyyy)</td>
    <td valign="top" align="left" height="30">
    <input type="text" placeholder="12/2015" value="" id="credit_card_exp" name="credit_card_exp"> <br />
    <label class="error" id="credit_card_exp_error"></label>
    </td>
    </tr>
    <tr>
    <td colspan="2" align="center" style="padding-top:10px;"><input type="submit" value="PAYMENT" class="login" id="payment" name="payment"></td>
    </tr>
    </table>
    </form>

谢谢,韩

4

2 回答 2

1

使用 javascript 日期对象。例如:

var currentDate = new Date(); //this returns the current datetime
//Clear all the other date parts.
currentDate.setDate(0);
currentDate.setHours(0);
currentDate.setMinutes(0);
currentDate.setSeconds(0);
currentDate.setMilliseconds(0);


var year = 2013;
var month = 6;
//I hardcode year and month (you get year and month from user)
var dateToCheck = new Date(year,month,0,0,0,0,0);

// Check like this:
if (dateToCheck.getTime() < currentDate.getTime()){
   //invalid date
}

在您的情况下,在您的代码中再添加 1 个 if ,如下所示:

  function validate(payment_form){

       if(payment_form.credit_card_exp.value.length==0){
           document.getElementById("credit_card_exp_error").innerHTML="Enter Credit Card Expiry Date";
           return false;
       }

       var datereg = /^(0[1-9]|1[012])[- /.](19|20)\d\d+$/;
       if (!datereg.test(payment_form.credit_card_exp.value)) {
           document.getElementById("credit_card_exp_error").innerHTML="Enter valid Date";
           return false;
        }

        var currentDate = new Date(); //this returns the current datetime
        //Clear all the other date parts.
        currentDate.setDate(0);
        currentDate.setHours(0);
        currentDate.setMinutes(0);
        currentDate.setSeconds(0);
        currentDate.setMilliseconds(0);   

        var year = parseInt(payment_form.credit_card_exp.value.split('/')[1]);
        var month = parseInt(payment_form.credit_card_exp.value.split('/')[0]);

        var dateToCheck = new Date(year,month,0,0,0,0,0);

        if (dateToCheck.getTime() < currentDate.getTime()){
           //invalid date
            return false;
        } 

        document.getElementById("credit_card_exp_error").innerHTML="";
        return true; 
  }
于 2013-06-15T09:43:07.933 回答
0

如果您使用 jQuery 验证,则可以将其用于 mm/yy 格式。我认为您可以轻松地将其修改为 mm/yyyy 格式。

$.validator.addMethod("card_expiry", function (value, element) {
return checkExpire(value);}, "Invalid expiry date");


function checkExpire(value) {
    var today = new Date();
    var year = value.substring(value.indexOf('/') + 1, 5);
    var month = value.substring(0, value.indexOf('/'));
    var expDate = new Date('20' + year, (month)); // JS Date Month is 0-11 not 1-12 replace parameters with year and month
    if (parseInt(month) > 12) {
        return false;
    } else if (today.getTime() > expDate.getTime()) {
    return false;
    } else if (/^((0[1-9])|(1[0-2]))\/(\d{2})$/i.test(value) == false) {
        return false;
    }

    return true;
}

并将类 card_expiry 添加到您的元素。

于 2016-04-21T06:30:26.917 回答