我一直想把这件事做完,但没有成功。我使用正则表达式来验证用户根据单选按钮选择的信用卡类型输入的信用卡号。但我希望所有的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.
发布于 2016-11-24 07:22:07
在您的例子中,有4个不同的if
块,当前一次失败时,它会命中每个单独的块。
将if
替换为if else
,这样只会验证单个用例。此外,您不需要让用户知道他正在尝试输入的卡的具体类型。只需输入有效数字的一条消息就足够了。
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})$/;
var isValid = false;
if (visaRegEx.test(ccNum)) {
isValid = true;
} else if(mastercardRegEx.test(ccNum)) {
isValid = true;
} else if(amexpRegEx.test(ccNum)) {
isValid = true;
} else if(discovRegEx.test(ccNum)) {
isValid = true;
}
if(isValid) {
alert("Thank You!");
} else {
alert("Please provide a valid Visa number!");
}
}
发布于 2016-11-24 07:20:36
将您的逻辑更改为:
<script type="text/javascript">
// Store the regexes as globals so they're cached and not re-parsed on every call:
var visaPattern = /^(?:4[0-9]{12}(?:[0-9]{3})?)$/;
var mastPattern = /^(?:5[1-5][0-9]{14})$/;
var amexPattern = /^(?:3[47][0-9]{13})$/;
var discPattern = /^(?:6(?:011|5[0-9][0-9])[0-9]{12})$/;
function validateCreditCardNumber() {
var ccNum = document.getElementById("cardNum").value;
var isVisa = visaPattern.test( ccNum ) === true;
var isMast = mastPattern.test( ccNum ) === true;
var isAmex = amexPattern.test( ccNum ) === true;
var isDisc = discPattern.test( ccNum ) === true;
if( isVisa || isMast || isAmex || isDisc ) {
// at least one regex matches, so the card number is valid.
if( isVisa ) {
// Visa-specific logic goes here
}
else if( isMast ) {
// Mastercard-specific logic goes here
}
else if( isAmex ) {
// AMEX-specific logic goes here
}
else if( isDisc ) {
// Discover-specific logic goes here
}
}
else {
alert("Please enter a valid card number.");
}
}
</script>
发布于 2018-06-06 05:51:38
这个应该就行了
var cc = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|62[0-9]{14})$/
cc.test(card_number)
来源:vee-验证库
https://stackoverflow.com/questions/40775674
复制相似问题