format card 2

by TokenEx Support

HTML

<input type="text" id="data" />

JavaScript

data = document.getElementById("data");
data.onkeyup = handler;
//data.onkeyup = log;

function log() {
  console.log("log" + data.selectionStart);
}

function arrayContains(needle, arrhaystack) {
  return (arrhaystack.indexOf(needle) > -1);
}

function getCardType(creditCardNumber) {
  var type;
  if (creditCardNumber.match(/^3[47]\d{13}$/)) {
    type = "americanExpress";
  } else if (creditCardNumber.match(/^(6011|65\d{2}|64[4-9]\d)\d{12}|^(62\d{14})$/)) {
    type = "discover";
  } else if (creditCardNumber.match(/^(5[1-5]\d{4}|677189|222[1-9]\d{2}|22[3-9]\d{3}|2[3-6]\d{4}|27[01]\d{3}|2720\d{2})\d{10}$/)) {
    type = "masterCard";
  } else if (creditCardNumber.match(/^4\d{12}(\d{3})?(\d{3})?$/)) {
    type = "visa";
  } else if (creditCardNumber.match(/^3(0[0-5]|[68]\d)\d{11}$/)) {
    type = "diners";
  } else if (creditCardNumber.match(/^35(28|29|[3-8]\d)\d{12}$/)) {
    type = "jcb";
  } else if (creditCardNumber.match(/^\d{13,19}$/)) {

    type = "unknown";
  } else {
    type = "invalid";
  }
  return type;
}
var cardNumberLengths = {
                visa: ["13", "16"],
                american_express: ["15"],
                discover: ["16"],
                jcb: ["16"],
                diners_club: ["14", "16"],
                master: ["16"],
                dankort: ["16"],
                default: ["16"]
            };
function spacerPositions(cardType) {
  return 'americanExpress' === cardType ? [4, 11] : [4, 9, 14];

}

function maxValidLength(cardType) {
  var brand = '';
  return cardNumberLengths[brand = cardType && cardNumberLengths[cardType] ? cardType : 'default'][cardNumberLengths[brand].length - 1]
  return 16;
}


function handler(e) {
  if (224 === e.keyCode || 91 === e.keyCode || 93 === e.keyCode);
  else if (39 !== e.keyCode && 37 !== e.keyCode) {
    var backspace = 46 === e.keyCode || 8 === e.keyCode;
    formatCreditCard(data, backspace)
  }
}


function formatCreditCard(field, backspace) {
  var initialCursorIndex =...