onkeydown が入力ボックスに入力されている現在の値を実行して、4 つの主要な種類のクレジット カードのいずれかの正規表現と一致するかどうかを確認するツールを作成しています。
私はそれがうまくいっているように感じますが、それは不安定なので、何が間違った応答を与える原因を突き止めたかったのです (たとえば、1 つではなく 2 つの値を出力することがあります)。ループする前にフラグ変数を設定する必要があるからですか? 正しいカードが一致すると、オブジェクトを介してループから戻るだけなので、それで十分だと思いました...
正規表現の基準は、次のサイトから取得されました。
Visa :
^4[0-9]{12}(?:[0-9]{3})?$
すべての Visa カード番号は 4 で始まります。新しいカードは 16 桁です。古いカードは 13 です。MasterCard :
^5[1-5][0-9]{14}$
すべての MasterCard 番号は 51 ~ 55 の数字で始まります。すべて 16 桁です。American Express :
^3[47][0-9]{13}$
American Express カード番号は 34 または 37 で始まり、15 桁です。Discover :
^6(?:011|5[0-9]{2})[0-9]{12}$
Discover カード番号は 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; } } } }); });