formatcard
by TokenEx Support
HTML
<input type="text" id="data" />
JavaScript
data = document.getElementById("data");
data.onkeyup = formatCreditCard;
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;
}
function formatCreditCard(event) {
//ignore left,right, delete and backspace keys
var keysToIgnore = [37, 38, 39, 40, 46, 8, 17, 36, 35, 16];
var copyKeys = [65, 67];
if (arrayContains(event.keyCode, keysToIgnore)) return true;
if (event.ctrlKey && arrayContains(event.keyCode, copyKeys)) {
return true;
}
var targ = data;
//strip non numbers and spaces
var currValue = targ.value.replace(/[^0-9\s]/g, "");
targ.value = currValue;
//strip remove non numbers
var cleansedValue = currValue.replace(/[^0-9]/g, "");
//targ.value = currValue;
var selectedIndex = targ.selectionStart;
var origSelectedIndex = selectedIndex;
var amex = cleansedValue.match(/^3[47]\d{0,13}$/);
var cardType = getCardType(cleansedValue);
// validations.setCurrentCardType(cardType);
var numberLength = amex ? 15 : 16;
var maxLength = Math.min(cleansedValue.length, numberLength);
cleansedValue = cleansedValue.substring(0, maxLength);
var chunks = [];
if (amex) {
chunks.push(cleansedValue.substring(0,...