【发布时间】:2016-11-23 23:12:54
【问题描述】:
我一直在努力完成这项工作,但没有成功。我正在使用正则表达式根据通过单选按钮选择的信用卡类型验证用户输入的信用卡号。 但我一直在提醒所有 if 语句。看起来所有的 if else 语句都经过了测试。
There is the HTML code fragment:
<code>
<p><b>Payment Information:</b></p>
<fieldset>
<input type="radio" name="payment" value="Visa" id="visa" />Visa
<input type="radio" name="payment" value="Master Card" />Master Card
<input type="radio" name="payment" value="American Express" />American Express
<input type="radio" name="payment" value="Discover" />Discover <br /><br />
<label>Card Number:</label>
<input type="text" name="cardNumber" id="cardNum" size="30" value="" onblur="ValidateCreditCardNumber()" />
</code>
And there is my javascript function :
<code>
function ValidateCreditCardNumber(){
var ccNum = document.getElementById("cardNum").value;
var visaRegEx = /^(?:4[0-9]{12}(?:[0-9]{3})?)$/;
var mastercardRegEx = /^(?:5[1-5][0-9]{14})$/;
var amexpRegEx = /^(?:3[47][0-9]{13})$/;
var discovRegEx = /^(?:6(?:011|5[0-9][0-9])[0-9]{12})$/;
if (visaRegEx.test(ccNum) === false ){ // Visa validation
alert("Please provide a valid Visa number!");
}
else
{
alert("Thank You!");
}
if (mastercardRegEx.test(ccNum) === false){ // MasterCard validation
alert("Please provide a valid MasterCard number!");
}
else
{
alert("Thank You!");
}
if(amexpRegEx.test(ccNum) === false){ // Amex validation
alert("Not a valid America Express number!");
}
else
{
alert("Thank You!");
}
if (discovRegEx.test(ccNum) === false){ // Discover validation
alert("Please provide a valid Discover number!");
}
else
{
alert("Thank You!");
}
}
</code>
Any kind of help or advice would be really appreciated.
【问题讨论】:
-
没有验证信用卡号码的数学规则吗?见en.wikipedia.org/wiki/Luhn_algorithm
-
@Phil 我相信有,但有人告诉我改用正则表达式。
-
“告诉”是谁?告诉他们有更好的方法
-
正则表达式只会验证输入值的格式 - 例如,正则表达式无法计算 CC 编号的校验位,这也应该这样做。但是我注意到这些正则表达式会阻止用户使用空格或连字符输入他们的 CC 号码(这提高了可读性和可用性)。我认为您应该进行最小长度检查,并让您的后端支付处理器对数字进行实际验证。
标签: javascript regex