JavaScript信用卡验证

时间:2017-04-22 05:40:05

标签: javascript

我目前正在为学校做一些家庭作业,我很少被我的开关困住了!

我在alert(card) checkcard();之前收到回复 我的问题是,没有一个案例实际上会验证参考卡的类型,我不允许使用任何插件,如jQuery等。 我将发布相关代码并很高兴收到你们的回复:D我已经用####评论了这些内容。此外,getcard确实会返回正确的卡片类型。

    function getCard(){
    var cardType = "unknown";
    var cardTypeArray = document.getElementById("chooseCard").getElementsByTagName("input");


    for(var i = 0; i < cardTypeArray.length; i++){
        if (cardTypeArray[i].checked) { 
            cardType = cardTypeArray[i].value;  
        }
    }
    alert ("cardtype is" + cardType);
    return cardType;

}
function checkCard(cardNumber){
    var errMsg = "";
    var card = getCard(); 
    //var cardNumber = document.getElementById("cardNumber").value;
    var regVisa = /^4[0-9]{12}(?:[0-9]{3})?$/;
    var regMaster = /^5[1-5][0-9]{14}$/;
    var regAmerica = /^3[47][0-9]{13}$/;
    alert(card); // works till here #######

    switch(card){
        case "Visa":
            if (parseInt(cardNumber.substring(0,1)!=4) {
                errMsg = "card number is not visa \n";
            }
            break;
        case "Mastercard":
            if (cardNumber.substring(0,1) !=5) {
                errMsg = "card number is not mastercard. \n";
            }
        break;
        case "AmericanExpress":
            if (cardNumber.substring(0,2) !=51) {
                errMsg = "card number not american express, \n";
            }
            break;


    }
    return errMsg;


}
function validator(){

    var errMsg = "";                                /* stores the error message */
    var result = true;  
    var visaCard = document.getElementById("visa").checked;
    var masterCard = document.getElementById("mastercard").checked;
    var americanExpress = document.getElementById("americanExpress").checked;
    var cardName = document.getElementById("cardName").value;
    //document.getElementById("cardName").setAttribute('maxlength',40);
    var regexAlpha = /^[a-zA-Z ]+$/;
    var cardNumber = document.getElementById("cardNumber").value;
    var regexNum =  /^[0-9]+$/;
    var date = new Date();
    var todayDateMonth = date.getMonth() + 1;
    var todayDateYear = date.getFullYear();
    var expMonth = document.getElementById("expMonth").value;
    var expYear = document.getElementById("expYear").value;
    var regVisa = /^4[0-9]{12}(?:[0-9]{3})?$/;
    var regMaster = /^5[1-5][0-9]{14}$/;
    var regAmerica = /^3[47][0-9]{13}$/;


    if (todayDateMonth > expMonth || todayDateYear > expYear){
        errMsg += "expiry date is wrong\n";
        result = false;
    }

    if (!(visaCard || masterCard || americanExpress)){
        errMsg += "please select visa, mastercard or american express\n";
        result = false;
    }   /* assumes no errors */


    if (cardNumber.length > 16 || cardNumber.length < 15 )
    {
        errMsg = errMsg + "your card number can only contain 15 to 16 digits \n";
        result = false;
    }else{
        checkCard(cardNumber); // Starts here #######

    }






    if (cardName.length > 40 || cardName.length < 1 || !regexAlpha.test(cardName))
    {
        errMsg = errMsg + "your card name must only contain alpha characters \n";
        result = false;
    }
    if (errMsg != "") {
        alert(errMsg);
    }
    return result;    //if false the information will not be sent to the server
}

function init() {
    if(document.getElementById("regform")!==null){
    var regForm = document.getElementById("regform");// get ref to the HTML element
    regForm.onsubmit = validate;    
    prefill_form();
}
    if(document.getElementById("bookform") !=null){
    var bookForm = document.getElementById("bookform");
    bookForm.onsubmit = validator;          /* assigns functions to corresponding events */
    var cancel = document.getElementById("cancelButton");
    cancel.onclick = cancelBooking;
    getBooking();

    }

}

2 个答案:

答案 0 :(得分:1)

问题在于我看到的代码结构。你在switch中有一个if条件而没有任何关联的else。如果不了解您的测试条件,我有充分的理由相信您没有正确处理案件和条件。找到代码出错位置的简单方法是在代码中添加debugger;语句。打开您的开发人员工具,您可以在大多数浏览器中按F12或仅通过右键单击选项来执行此操作。它应该暂停代码的执行。然后你会看到两个按钮。 1.播放按钮,它将立即恢复代码执行。 2.弯曲箭头的类型,这是重要的一个,您可以逐行执行代码,并查看传递了哪些条件以及代码的哪一部分实际执行。想把它放在评论中但是太长了不适合。如果您在调试时遇到问题,请随时在此处发表评论。如果您无法打开特定窗口,则只需谷歌开发人员工具

答案 1 :(得分:1)

好的,问题是我没有返回错误消息或错误结果。我发布了与以前相同的代码,但我添加的内容使其适用于那些感兴趣的人。感谢您的反馈!我将在船上拿几点。无论如何代码如下,寻找###################。

function validator(){

var errMsg = "";                                
var result = true;  


var visaCard = document.getElementById("visa").checked;
var masterCard = document.getElementById("mastercard").checked;
var americanExpress = document.getElementById("americanExpress").checked;
var cardName = document.getElementById("cardName").value;

var regexAlpha = /^[a-zA-Z ]+$/;
var cardNumber = document.getElementById("cardNumber").value;
var regexNum =  /^[0-9]+$/;
var date = new Date();
var todayDateMonth = date.getMonth() + 1;
var todayDateYear = date.getFullYear();
var expDate = document.getElementById("expDate").value;
var dateFormat = /^[\d]{2}\/[\d]{4}$/;





if (!dateFormat.test(expDate)){
    errMsg += "please select a valid date range\n";
    result = false;
}else if (todayDateYear > expDate.substring(3,7)){
    errMsg += "please select a valid expiry year\n";
    result = false;
} else if (todayDateYear == expDate.substring(3,7) && todayDateMonth > expDate.substring(0,2)){
    errMsg += "please select a valid expiry month\n";
    result = false;
}




if (!(visaCard || masterCard || americanExpress)){
    errMsg += "please select visa, mastercard or american express\n";
    result = false;
}   


if (cardNumber.length > 16 || cardNumber.length < 15 )
{
    errMsg = errMsg + "your card number can only contain 15 to 16 digits \n";
    result = false;
}else{
    // code below is what i added ######################################
    var tempMsg = checkCard(cardNumber);
    if (tempMsg != "") {
        errMsg = errMsg + tempMsg;
        result = false;
    };

} 







if (cardName.length > 40 || cardName.length < 1 || !regexAlpha.test(cardName))
{
    errMsg = errMsg + "your card name must only contain alpha characters \n";
    result = false;
}
if (errMsg != "") {
    alert(errMsg);
}
return result;    //if false the information will not be sent to the server

}

function checkCard(cardNumber){
var errMsg = "";
var card = getCard(); 
var cvv = document.getElementById("CVV").value;
var regVisa = /^4[0-9]{12}(?:[0-9]{3})?$/;
var regMaster = /^5[1-5][0-9]{14}$/;
var regAmerica = /^3[47][0-9]{13}$/;
var cvvCheck3 =/^[0-9]{3}$/;
var cvvCheck4 =/^[0-9]{4}$/;




//do with if else 
switch(card){
    case "Visa":
        if (!regVisa.test(cardNumber) || !cvvCheck3.test(cvv)) {
            errMsg = "card number is not visa or cvv is wrrong \n";
        }
        break;
    case "Mastercard":
        if (!regMaster.test(cardNumber)  || !cvvCheck3.test(cvv)) {
            errMsg = "card number is not mastercard or cvv is wrong\n";
        }
    break;
    case "AmericanExpress":
        if (!regAmerica.test(cardNumber) || !cvvCheck4.test(cvv)) {
            errMsg = "card number not american express or cvv is wrong, \n";
        }
        break;
        default: 
        errMsg = "we cant process this card number \n";
}
return errMsg;  

}

相关问题