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 =...