我正在寫一個工具,onkeydown將運行輸入框中輸入的當前值,以檢查它是否與4種主要類型的信用卡之一的正則表達式匹配。Javascript中的信用卡預測
我覺得它是一種工作,但它很脆弱,所以我想弄清楚是什麼導致它給出錯誤的響應(例如有時會輸出2個值而不是1個)。是因爲我需要在循環之前設置一個標誌變量?在正確的卡的比賽,我只是從通過對象循環回來,所以我想會是足以...
的正則表達式的標準是從this site拉:
Visa:
^4[0-9]{12}(?:[0-9]{3})?$
所有的Visa卡號碼都以4開頭。新卡有16位數字。老卡有13萬事達:
^5[1-5][0-9]{14}$
所有萬事達卡號開始與數字51到55.所有具有16位數字。美國運通:
^3[47][0-9]{13}$
美國運通卡號碼以34或37開頭並且有15位數字。探索:
^6(?:011|5[0-9]{2})[0-9]{12}$
發現卡號以6011或65開頭。全部都有16位數字。$(function() { var $cardNumber = $('#js-cardnumber'); var ccMap = {}; ccMap.cards = { 'amex': '^3[47][0-9]{13}$', 'discover': '^6(?:011|5[0-9]{2})[0-9]{12}$', 'mastercard': '^5[1-5][0-9]{14}$', 'visa': '^4[0-9]{12}(?:[0-9]{3})?$' }; $cardNumber.keydown(function() { for (var cardType in ccMap.cards) { if (ccMap.cards.hasOwnProperty(cardType)) { var regex = ccMap.cards[cardType]; if (regex.match($(this).val())) { console.log(cardType); return; } } } }); });
你在其他地方做得不對。登錄到控制檯後,您退出過程/結束循環,因此不會輸出兩個日誌行。 – SJuan76 2012-08-11 21:06:05
請查看http://en.wikipedia.org/wiki/Luhn。然後這個實現是JS https://github.com/jzaefferer/jquery-validation/blob/master/jquery.validate.js#L1129 – elclanrs 2012-08-11 21:11:38
不要重新發明輪子;) – jantimon 2012-08-11 21:13:21