UNPKG

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
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) ); }