【发布时间】:2015-05-02 23:18:53
【问题描述】:
我没有收到来自我整理的信用卡检测 jQuery 的正确输出。 keyup 事件调用一个函数 creditCardTypeFromNumber(num),并且应该检测到信用卡类型。不幸的是,无论输入什么值,返回的唯一内容都是“未知”。我使用过 6011(发现)、5155(万事达卡)和 4147(维萨卡),但都不起作用。
我在这里使用了帖子中每种信用卡类型的 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 似乎找到了正确的卡片类型。什么不工作?
-
无论我输入什么 4 位数字,每次都会返回 UNKNOWN。我已经在 jsfiddle 中输入了上面的示例数字,并且每次它都向我返回 UNKNOWN。
-
@ScriptsConnect 提供给
input的字符数返回“未知”? “4147”似乎需要七个字符num.match(/^4[0-9]{6,}$/)才能返回匹配项? -
谢谢@guest271314,这似乎是问题所在。我做的唯一测试是从 4(我在 JSFiddle 中有)切换到 6,但它仍然不适合我。我刚把它切换到 7,现在一切似乎都正常了。
-
@bozdoz,我现在明白你说它找到了正确的卡类型是什么意思。我从来没有输入超过 4 个(当我更改长度时输入了 6 个)并且我没有找到正确的卡片类型。
标签: javascript jquery regex