Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式自动查找输入的信用卡类型。如何用Javascript编写此代码?_Javascript_Html_Regex - Fatal编程技术网

正则表达式自动查找输入的信用卡类型。如何用Javascript编写此代码?

正则表达式自动查找输入的信用卡类型。如何用Javascript编写此代码?,javascript,html,regex,Javascript,Html,Regex,我正在尝试使用正则表达式来验证信用卡,并自动检查信用卡的框类型,而无需用户进行检查 这是我的密码。JS文件,html文件。我迷路了,跑不动了。如有任何指示,将不胜感激: index.htm <body> <header> <h1> Hands-on Project 8-3 </h1> </header> <article> <form actio

我正在尝试使用正则表达式来验证信用卡,并自动检查信用卡的框类型,而无需用户进行检查

这是我的密码。JS文件,html文件。我迷路了,跑不动了。如有任何指示,将不胜感激:

index.htm

<body>
   <header>
      <h1>
         Hands-on Project 8-3
      </h1>
   </header>

   <article>
      <form action="results.htm">
         <fieldset id="paymentInfo" class="text">
            <legend>Payment Information</legend>
            <div class="offset">
               <label for="ccNum">Card #</label>
               <input id="ccNum" name="CardNumber" type="number" required="required" />
               <div id="ccNumErrorMessage"></div>
            </div>
            <div id="cards" class="inline">
               <input id="visa" name="PaymentType" type="radio" value="Visa" />
               <label for="visa">Visa</label>
               <input id="mc" name="PaymentType" type="radio" value="MC" />
               <label for="mc">Master Card</label>
               <input id="discover" name="PaymentType" type="radio" value="Discover" />
               <label for="discover">Discover</label>
               <input id="amex" name="PaymentType" type="radio" value="AmEx" />
               <label for="amex">American Express</label>
            </div>
            <div class="offset">
               <label>Expiration</label>
               <div class="inline" id="exp">
                  <label for="expMo" id="expMoLabel">Expiration Month</label>
                  <select id="expMo" name="ExpMonth" required="required">
                     <option value="01">01</option>
                     <option value="02">02</option>
                     <option value="03">03</option>
                     <option value="04">04</option>
                     <option value="05">05</option>
                     <option value="06">06</option>
                     <option value="07">07</option>
                     <option value="08">08</option>
                     <option value="09">09</option>
                     <option value="10">10</option>
                     <option value="11">11</option>
                     <option value="12">12</option>
                  </select>
                  <label for="expYr" id="expYrLabel">Expiration Year</label>
                  <select id="expYr" name="ExpYear" required="required">
                     <option value="2017">2017</option>
                     <option value="2018">2018</option>
                     <option value="2019">2019</option>
                     <option value="2020">2020</option>
                     <option value="2021">2021</option>
                  </select>
               </div>
               <label for="cvv">CVV</label>
               <input id="cvv" name="CVVValue" type="number" required="required" /> 
            </div>
         </fieldset>
      </form>
   </article>

<script src="script1.js"></script>   
</body>
</html>
您可以使用来确定该号码是否为信用卡号码。要确定品牌,你只需看卡片的第一个数字就可以知道

卡类型的第一位数字:

  • 签证:4
  • 万事达卡:5张
  • 发现:6
  • 美国运通:3
下面是JavaScript中的
luhn algrithm
示例:

//////////////////////////////////////////////////////////////////////////////////////
// FUNCTION - VALIDATE CREDIT CARD NUMBER (original code by DiegoSalazar)
//////////////////////////////////////////////////////////////////////////////////////
function validateCardNumber(value){

    // ACCEPT ONLY DIGITS, DASHES OR SPACES
    if(/[^0-9-\s]+/.test(value)){

        return false;

    }

    // LUHN ALGORITHM
    var nCheck = 0;
    var nDigit = 0;
    var bEven = false;

    // REMOVE SPACES
    value = value.replace(/\D/g,"");

    // LOOP
    for(var n = value.length - 1; n >= 0; n--){

        // SET VALUES
        var cDigit = value.charAt(n);
        var nDigit = parseInt(cDigit, 10);

        // CHECK FOR EVEN
        if(bEven){

            // CHECK FOR SOMETHING
            if((nDigit *= 2) > 9){

                // SUBSRACT 9
                nDigit -= 9;

            }

        }

        // INCREASE
        nCheck += nDigit;
        bEven = !bEven;

    }

    // RETURN
    return (nCheck % 10) == 0;

} // END FUNCTION

代码中存在语法错误:

// local variables
var cardNumValue = document.getElementById("ccNum").value,
    var visa = /^4[0-9]{12}(?:[0-9]{3})?$/,
    var mc = /^5[1-5][0-9]{14}$/,
    var discover = /^6(?:011|5[0-9]{2})[0-9{12}$/],
    var amex = /^3[47][0-9]{13}$/,
您不应该在每个变量之前重复
var
关键字,并且应该以
结束声明语句,而不是
。另外,
discover
regexp将最后一个
]
放在了错误的位置——它应该在
0-9
之后,但它在
/
之后。(顺便说一句,
[0-9]
可以替换为
\d

因此,它应该是:

// local variables
var cardNumValue = document.getElementById("ccNum").value,
    visa = /^4[0-9]{12}(?:[0-9]{3})?$/,
    mc = /^5[1-5][0-9]{14}$/,
    discover = /^6(?:011|5[0-9]{2})[0-9]{12}$/,
    amex = /^3[47][0-9]{13}$/;
或者您可以将每个声明作为单独的语句,因此它们都需要以
结尾,而不是

// local variables
var cardNumValue = document.getElementById("ccNum").value;
var visa = /^4[0-9]{12}(?:[0-9]{3})?$/;
var mc = /^5[1-5][0-9]{14}$/;
var discover = /^6(?:011|5[0-9]{2})[0-9]{12}$/;
var amex = /^3[47][0-9]{13}$/;

script1.js

的末尾还有一个不匹配的
}
有一个标准的编号格式来确定它是哪个品牌。谷歌吧@sln他已经在他的regexp中有了它。在Javascript的末尾有一个额外的
}
。Javascript控制台中有错误吗?我已经否决了,因为我注意到一个语法错误,这意味着你显然是在检查控制台错误之前发布的。函数
selectCardType()
决定品牌。Luhn check与运行Javascript函数的问题有什么关系?@Barmar Luhn check是验证信用卡而无需将其发送给处理器的最准确方法。我知道这一点。但这不是他在问题中问的问题。他正试图用他的函数
selectCardType()
自动设置信用卡类型。啊,旧的多重声明。
// local variables
var cardNumValue = document.getElementById("ccNum").value;
var visa = /^4[0-9]{12}(?:[0-9]{3})?$/;
var mc = /^5[1-5][0-9]{14}$/;
var discover = /^6(?:011|5[0-9]{2})[0-9]{12}$/;
var amex = /^3[47][0-9]{13}$/;