masked-input-utils-ts
Version:
Reusable masking utility for PAN, Aadhar, CVV, Mobile Numbers, Email with TypeScript support
43 lines (42 loc) • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.maskPAN = maskPAN;
exports.maskAadhar = maskAadhar;
exports.maskCVV = maskCVV;
exports.maskMobile = maskMobile;
exports.maskEmail = maskEmail;
exports.maskGeneric = maskGeneric;
function maskPAN(pan, showPartial = true) {
if (!/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(pan))
return 'Invalid PAN';
return showPartial ? `${pan.slice(0, 2)}*****${pan.slice(-3)}` : '***********';
}
function maskAadhar(aadhar) {
const cleaned = aadhar.replace(/\D/g, '');
if (cleaned.length !== 12)
return 'Invalid Aadhar';
return `XXXX-XXXX-${cleaned.slice(-4)}`;
}
function maskCVV(cvv) {
return /^\d{3,4}$/.test(cvv) ? '*'.repeat(cvv.length) : 'Invalid CVV';
}
function maskMobile(mobile) {
const cleaned = mobile.replace(/\D/g, '');
if (cleaned.length !== 10)
return 'Invalid Mobile Number';
return `${cleaned.slice(0, 2)}******${cleaned.slice(-2)}`;
}
function maskEmail(email) {
const [user, domain] = email.split('@');
if (!user || !domain)
return 'Invalid Email';
return `${user[0]}${'*'.repeat(user.length - 1)}@${domain}`;
}
function maskGeneric(str, options) {
const { unmaskedStart, unmaskedEnd, maskChar = '*' } = options;
if (!str || str.length < unmaskedStart + unmaskedEnd)
return maskChar.repeat(str.length);
return (str.slice(0, unmaskedStart) +
maskChar.repeat(str.length - unmaskedStart - unmaskedEnd) +
str.slice(-unmaskedEnd));
}