masked-input-utils-ts
Version:
Reusable masking utility for PAN, Aadhar, CVV, Mobile Numbers, Email with TypeScript support
40 lines (34 loc) • 1.41 kB
text/typescript
export function maskPAN(pan: string, showPartial = true): string {
if (!/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(pan)) return 'Invalid PAN';
return showPartial ? `${pan.slice(0, 2)}*****${pan.slice(-3)}` : '***********';
}
export function maskAadhar(aadhar: string): string {
const cleaned = aadhar.replace(/\D/g, '');
if (cleaned.length !== 12) return 'Invalid Aadhar';
return `XXXX-XXXX-${cleaned.slice(-4)}`;
}
export function maskCVV(cvv: string): string {
return /^\d{3,4}$/.test(cvv) ? '*'.repeat(cvv.length) : 'Invalid CVV';
}
export function maskMobile(mobile: string): string {
const cleaned = mobile.replace(/\D/g, '');
if (cleaned.length !== 10) return 'Invalid Mobile Number';
return `${cleaned.slice(0, 2)}******${cleaned.slice(-2)}`;
}
export function maskEmail(email: string): string {
const [user, domain] = email.split('@');
if (!user || !domain) return 'Invalid Email';
return `${user[0]}${'*'.repeat(user.length - 1)}@${domain}`;
}
export function maskGeneric(
str: string,
options: { unmaskedStart: number; unmaskedEnd: number; maskChar?: string }
): string {
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)
);
}