【问题标题】:Formatting Amex credit card格式化美国运通信用卡
【发布时间】:2016-10-21 14:11:37
【问题描述】:

当用户输入数据时,我正在使用以下代码格式化信用卡。我的要求是将美国运通信用卡格式化为 4 6 5 格式,其余格式为 4 4 4 4 格式。问题是在输入所有 15 位数字之前,不会发生美国运通卡格式化。而一旦用户输入第 5 个字符,就会发生其他验证。如果是美国运通,我该如何实现?

if(result.card_type.name == 'amex' )
{
    $(this).val(function(i, v){
        /*   var v = v.replace(/[^\d]/g, '').match(/.{1,4}/g); */
        var v = v.replace(/\b(\d{4})(\d{6})(\d{5})\b/, '$1 $2 $3');
        return v;
    }); 
}
else{
    $(this).val(function(i, v){
        var v = v.replace(/[^\d]/g, '').match(/.{1,4}/g);
        return v ? v.join(' ') : '';
    });  
}

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    var v = v.replace(/\b(\d{4})(\d{6})(\d{5})\b/, '$1 $2 $3'); 将在找到 4+6+5 个数字时匹配

    试试这个

    $(this).val(function(i, v){
      v = v.replace(/\b(\d{4})/, '$1-');
      v = v.replace(/-(\d{6})/, '-$1-');
      return v;
    }); 
    

    https://jsfiddle.net/zgpwmmjy/

    【讨论】:

    • 这是在输入有效数字后导致各种奇怪的行为。
    • 当我输入012345678901234 我会得到0123-456789-01234。此代码仅适用于我们代码的result.card_type.name == 'amex' 部分。
    猜你喜欢
    • 2016-12-01
    • 1970-01-01
    • 2014-08-02
    • 2020-12-30
    • 2015-10-19
    • 1970-01-01
    • 2010-10-14
    • 2018-02-23
    • 2014-06-10
    相关资源
    最近更新 更多