Я не получаю правильный результат от обнаружения кредитной карты jQuery, который я собрал. Событие keyup вызывает функцию creditCardTypeFromNumber (num), и предполагается, что тип кредитной карты будет обнаружен. К сожалению, единственное, что возвращается, - «UNKNOWN», независимо от того, какое значение вводится. Я использовал 6011 (открыть), 5155 (MasterCard) и 4147 (Visa), ни одна из которых не работает.RegEx и Keyup для обнаружения кредитных карт
Я использовал RegEx каждого типа кредитной карты с поста здесь:
How do you detect Credit card type based on number?
И я эти две функции вместе на основе того, что было сделано здесь:
Я собрал JSFiddle, чтобы показать, что он не работает. Если бы кто-то мог мне помочь, я бы очень признателен. Благодаря
creditCardTypeAction();
/**
* Detect Credit Card Type Function
*/
function creditCardTypeAction(){
$('.creditcardnumber').on('keyup', function(){
if($(this).val().length >= 4){
cardType = creditCardTypeFromNumber($(this).val());
}
});
}
function creditCardTypeFromNumber(num) {
// first, sanitize the number by removing all non-digit characters.
num = num.replace(/[^\d]/g,'');
// MasterCard
if (num.match(/^5[1-5][0-9]{5,}$/)) {
$('.cardsacceptedicon').removeClass('active');
$('.cardsacceptedicon.mastercard').addClass('active');
alert('MasterCard');
return 'MasterCard';
// Visa
} else if (num.match(/^4[0-9]{6,}$/)) {
$('.cardsacceptedicon').removeClass('active');
$('.cardsacceptedicon.visa').addClass('active');
alert('Visa');
return 'Visa';
/* AMEX */
} else if (num.match(/^3[47][0-9]{5,}$/)) {
$('.cardsacceptedicon').removeClass('active');
$('.cardsacceptedicon.amex').addClass('active');
alert('AMEX');
return 'AMEX';
// Discover
} else if (num.match(/^6(?:011|5[0-9]{2})[0-9]{3,}$/)) {
$('.cardsacceptedicon').removeClass('active');
$('.cardsacceptedicon.discover').addClass('active');
alert('Discover');
return 'Discover';
// Diners Club
} else if (num.match(/^3(?:0[0-5]|[68][0-9])[0-9]{4,}$/)){
$('.cardsacceptedicon').removeClass('active');
$('.cardsacceptedicon.diners').addClass('active');
alert('Diners Club');
return 'Diners Club';
// JCB
} else if (num.match(/^(?:2131|1800|35[0-9]{3})[0-9]{3,}$/)){
$('.cardsacceptedicon').removeClass('active');
$('.cardsacceptedicon.jcb').addClass('active');
alert('JCB');
return 'JCB';
}
alert('UNKNOWN');
return 'UNKNOWN';
}
Возможно, JSFiddle находит правильный тип карты. Что не работает? – bozdoz
Я получаю UNKNOWN каждый раз, независимо от того, какие 4 цифры я вхожу. Я ввел приведенные выше номера примеров в jsfiddle и каждый раз, когда он возвращает UNKNOWN ко мне. – Pegues
@ScriptsConnect Сколько символов, предоставленных 'input', возвращает« UNKNOWN »? «4147», по-видимому, требует семи символов 'num.match (/^4 [0-9] {6,} $ /)' для возврата соответствия? – guest271314