打开键时屏蔽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|35d{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);
});

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

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

/^(?: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]dd([ -]?)d{6}1d{5}$/

最新更新