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