Format credit card number

后端 未结 10 2250
梦谈多话
梦谈多话 2020-12-08 11:27

How to format and validate a credit card number with spaces between each 4 digit while typing:

eg: 4464 6846 4354 3564

I have tried:

10条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-08 12:24

    using vanilla js

    javascript:

    function formatCreditCardOnKey(event) {
        //on keyup, check for backspace to skip processing
        var code = (event.which) ? event.which : event.keyCode;
        if(code != 8)
            formatCreditCard();
        else{
            //trim whitespace from end; trimEnd() doesn't work in IE
            document.getElementById("cardNumber").value = document.getElementById("cardNumber").value.replace(/\s+$/, '');
        }
    
    }
    
    function formatCreditCard() {
        var cardField = document.getElementById("cardNumber");
        //remove all non-numeric characters
        var realNumber = cardField.value.replace(/\D/g,'');
        var newNumber = "";
        for(var x = 1; x <= realNumber.length; x++){
            //make sure input is a digit
            if (isNumeric(realNumber.charAt(x-1)))
                newNumber += realNumber.charAt(x-1);
            //add space every 4 numeric digits
            if(x % 4 == 0 && x > 0 && x < 15)
                newNumber += " ";
        }
        cardField.value = newNumber;
    }
    
    function isNumeric(char){
        return('0123456789'.indexOf(char) !== -1);
    }
    

    HTML:

    
    

    This works (for me) with autofill, allows the user to use backspace as expected (they don't have to delete whitespace), and doesn't allow (other) non-numeric characters.

提交回复
热议问题