Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
141
rated 0 times [  144] [ 3]  / answers: 1 / hits: 32241  / 8 Years ago, wed, november 23, 2016, 12:00:00

I've been trying to get this done but no success. I am using regular expression to validate the credit card number entered by user based on the type of credit card selected through the radio button.
But I keed having the alert for the all if statement. It looks like all the if else statements are tested.



There is the HTML code fragment: 

<code>
<p><b>Payment Information:</b></p>
<fieldset>
<input type=radio name=payment value=Visa id=visa />Visa &nbsp;
<input type=radio name=payment value=Master Card />Master Card &nbsp;
<input type=radio name=payment value=American Express />American Express &nbsp;
<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.

More From » regex

 Answers
18

You have 4 different if blocks in your case, which hits every single block when the previous once fail.



Replace if with if else, that way if will only validate for a single use case.
Also you need not let the user know to be specific about the type of card that he is trying to enter. Just a single message to enter a valid number should suffice.



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!);
}
}

[#59936] Tuesday, November 22, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
roberts

Total Points: 212
Total Questions: 101
Total Answers: 101

Location: Philippines
Member since Thu, Apr 14, 2022
2 Years ago
;