Skip to content

Instantly share code, notes, and snippets.

@luisfelipe-dev
Created November 21, 2019 13:40
Show Gist options
  • Save luisfelipe-dev/fb39a834ff60affdc7bbc4ee08be0017 to your computer and use it in GitHub Desktop.
Save luisfelipe-dev/fb39a834ff60affdc7bbc4ee08be0017 to your computer and use it in GitHub Desktop.
const Masks = {
methods: {
maskCep() {
return "#####-###";
},
maskPhone() {
return "(##) #####-####";
},
maskNumber(len) {
if (len) {
let mask = "";
while (mask.length < len) mask += "#";
return mask;
}
return "###########";
},
maskCard4444() {
return "#### #### #### ####";
},
maskCard4443() {
return "#### #### #### ###";
},
maskCard464() {
return "#### ###### ####";
},
maskCard465() {
return "#### ###### #####";
},
maskCard(value) {
let cardBrand = (value) => {
let brand = null;
var regex = {
visa: "(4[0-9]{3}(([\\s]*)[0-9]{4}){2}([\\s]*)[0-9]{1}(?:[0-9]{3})?)",
mastercard: "((2[0-9]{3}|5[1-5][0-9]{2})(([\\s]*)[0-9]{4}){3})",
dinners:
"(3(0[0-5]|[68][0-9])[0-9]{1}(([\\s]*)[0-9]{4}){2}(?:([\\s]*)[0-9]{2})?)",
hipercard:
"((38|60)[0-9]{2}(([\\s]*)[0-9]{4}){2}(([\\s]*)[0-9])(?:[0-9]{3}([\\s]*)[0-9]{3}|[0-9]{3})?)",
hiper: "6370[0-9]{12}",
americanexpress:
"((34|37)([0-9]{2})(([\\s]*)[0-9]{4}){2}(([\\s]*)[0-9]{3}))",
elo:
"((6363([\\s]*)6[8-9]|4389([\\s]*)35|5041([\\s]*)75|4514([\\s]*)16|4011([\\s]*)79|4312([\\s]*)74|4573([\\s]*)93|6362([\\s]*)97|6277([\\s]*)80|4576([\\s]*)3[1-2]|4011([\\s]*)78|5066([\\s]*)99|5067([\\s]*)[0-6][0-9]|5067([\\s]*)7[0-8]|509[0-9]([\\s]*)[0-9]{2}|6500([\\s]*)3[1-3]|6500([\\s]*)3[5-9]|6500([\\s]*)4[0-9]|6500([\\s]*)5[0-1]|6504([\\s]*)0[5-9]|6504([\\s]*)[1-3][0-9]|6504([\\s]*)8[5-9]|6504([\\s]*)9[0-9]|6505([\\s]*)[0-2][0-9]|6505([\\s]*)3[0-8]|6505([\\s]*)[4-8][1-9]|6505([\\s]*)9[0-8]|6507([\\s]*)0[0-9]|6507([\\s]*)1[0-8]|6507([\\s]*)2[0-7]|6509([\\s]*)0[1-9]|6509([\\s]*)1[0-9]|6509([\\s]*)20|6516([\\s]*)5[2-9]|6516([\\s]*)[6-7][0-9]|6550([\\s]*)[0-1][0-9]|6550([\\s]*)2[1-9]|6550([\\s]*)[2-4][0-9]|6550([\\s]*)5[0-8])[0-9]{2}(([\\s]*)[0-9]{4}){2}?)"
};
Object.keys(regex).map(card => {
if (new RegExp("^" + regex[card]).test(value)) return(brand = card);
});
return brand;
}
if (value) {
let brand = cardBrand(getOnlyNumbers(value));
switch (brand) {
case "mastercard":
case "visa":
case "elo":
case "hiper":
case "hipercard":
return this.maskCard4444() + "|" + brand;
case "dinners":
return this.maskCard464() + "|" + brand;
case "amex":
return this.maskCard465() + "|" + brand;
case "americanexpress":
return this.maskCard4443() + "|" + brand;
}
}
return this.maskCard4444();
}
}
};
function getOnlyNumbers(text) {
return text.replace(/ /g, "");
}
export { Masks };
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment