2015-11-24 39 views
0

我想在输入(密钥)上添加掩码来检查用户的信用卡号码。我已经创建了这个脚本,但它并不完美。掩码在jquery中加入密钥

function card_checker(cardinput) { 
    var cardno_american = /^(?:3[47][0-9]{13})$/; 
    var cardno_visa = /^(?:4[0-9]{12}(?:[0-9]{3})?)$/; 
    var cardno_master = /^(?:5[1-5][0-9]{14})$/; 
    var cardno_discover = /^(?:6(?:011|5[0-9][0-9])[0-9]{12})$/; 
    var cardno_dinner = /^(?:3(?:0[0-5]|[68][0-9])[0-9]{11})$/; 
    var cardno_jcb = /^(?:(?:2131|1800|35\d{3})\d{11})$/; 
    if (cardinput.match(cardno_visa)) { 
     return 1; 
    } else if (cardinput.match(cardno_master)) { 
     return 1; 
    } else if (cardinput.match(cardno_discover)) { 
     return 2; 
    } else if (cardinput.match(cardno_american)) { 
     return 3; 
    } else if (cardinput.match(cardno_jcb)) { 
     return 6; 
    } else { 
     return 0; 
    } 
} 
var oldVal; 
$('#card_number').on('keypress paste textInput input', function() { 
    var res = card_checker($('#card_number').val()); 
    var val = this.value; 
    console.log(res); 
    if ((val != oldVal) && (val.length == 1) && res == 3) { 
     $(this).mask('9999-9999-9999-999', { 
      "translation": { 
       "#": null 
      } 
     }); 
    } else { 
     $(this).mask('9999-9999-9999-9999', { 
      "translation": { 
       "#": null 
      } 
     }); 
    } 
    oldVal = val; 
    $(this).val(oldVal); 
}); 

这在美国运通卡上不起作用。

+0

你可能看http://www.regular-expressions.info /creditcard.html,它具有与您的Amex不同的正则表达式。 –

+0

谢谢格雷厄姆阿舍尔我已阅读并找到解决方案。 – Rajiv

回答

0

美国运通卡号码(无连字符)

/^(?:3[47][0-9]{13})$/ // matches the first 2 digit which starts with either 37 or 34 and rest 13 digits 

(连字符:XXXX-XXXXXX-XXXXX)

/^3[47]\d\d([\ \-]?)\d{6}\1\d{5}$/ 
+0

我在添加蒙版$(this).mask('9999-9999-9999-999') – Rajiv

+0

检查更新的解决方案时遇到问题 – DinoMyte

+0

感谢DinoMyte它的工作。 – Rajiv