Format credit card number

后端 未结 10 2186
梦谈多话
梦谈多话 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:20
    function testCreditCard () {
      myCardNo = document.getElementById('CardNumber').value;
      myCardType = document.getElementById('CardType').value;
      if (checkCreditCard (myCardNo,myCardType)) {
        alert ("Credit card has a valid format")
      } 
      else {alert (ccErrors[ccErrorNo])};
    }
    

    check this link for lib http://www.braemoor.co.uk/software/creditcard.shtml

    0 讨论(0)
  • 2020-12-08 12:22

    Format credit card number will be 16 digits and having automatic spacing between them will get by trying the below code for me. try it once

    handlecard(text) {
        let formattedText = text.split(' ').join('');
        if (formattedText.length <= 16) {
          if (formattedText.length > 0) {
            formattedText = formattedText.match(new RegExp('.{1,4}', 'g')).join(' ');
          }
        } else {
          alert("plz stop here")
        }
        this.setState({ creditCard: formattedText });
        return formattedText;
      }
    
    0 讨论(0)
  • 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:

    <input type="text" id="cardNumber" maxlength="19" onKeyUp="formatCreditCardOnKey(event)" onBlur="formatCreditCard()" onFocus="formatCreditCard()"/>
    

    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.

    0 讨论(0)
  • 2020-12-08 12:28

    Find

    Plunker for Formatting Credit Card Numbers

    using angularjs directive. Format Card Numbers in xxxxxxxxxxxx3456 Fromat.

    angular.module('myApp', [])
    
       .directive('maskInput', function() {
        return {
                require: "ngModel",
                restrict: "AE",
                scope: {
                    ngModel: '=',
                 },
                link: function(scope, elem, attrs) {
                    var orig = scope.ngModel;
                    var edited = orig;
                    scope.ngModel = edited.slice(4).replace(/\d/g, 'x') + edited.slice(-4);
    
                    elem.bind("blur", function() {
                        var temp;
                        orig  = elem.val();
                        temp = elem.val();
                        elem.val(temp.slice(4).replace(/\d/g, 'x') + temp.slice(-4));
                    });
    
                    elem.bind("focus", function() {
                        elem.val(orig);
                   });  
                }
           };
       })
      .controller('myCtrl', ['$scope', '$interval', function($scope, $interval) {
        $scope.creditCardNumber = "1234567890123456";
      }]);
    
    0 讨论(0)
提交回复
热议问题