Email Masking คืออะไร
การซ่อนส่วนหนึ่งของอีเมลเพื่อความเป็นส่วนตัว เช่น แสดงแค่ตัวแรกและตัวสุดท้ายของชื่อ แล้วแทนกลางด้วยจุด
ตัวอย่าง
const email = 'ramkumar@example.com'; // ผลลัพธ์: 'r...r@example.com'
โค้ดตัวอย่าง
const email = 'ramkumar@example.com';
const maskEmail = (email = '') => {
const [name, domain] = email.split('@');
const { length: len } = name;
// ตัวแรก + ... + ตัวสุดท้าย
const maskedName = name[0] + '...' + name[len - 1];
const maskedEmail = maskedName + '@' + domain;
return maskedEmail;
};
console.log(maskEmail(email));
ผลลัพธ์
r...r@example.com
เวอร์ชันปรับปรุง (รองรับกรณีขอบ)
const maskEmailAdvanced = (email, maskChar = '*', visibleStart = 1, visibleEnd = 1) => {
const [local, domain] = email.split('@');
if (!domain) return email; // ไม่ใช่อีเมลที่ถูกต้อง
if (local.length <= visibleStart + visibleEnd) {
return local + '@' + domain; // สั้นเกินไป ไม่ mask
}
const start = local.slice(0, visibleStart);
const end = local.slice(-visibleEnd);
const masked = maskChar.repeat(local.length - visibleStart - visibleEnd);
return start + masked + end + '@' + domain;
};
// ทดสอบ
console.log(maskEmailAdvanced('ramkumar@example.com')); // r*****ar@example.com
console.log(maskEmailAdvanced('a@example.com')); // a@example.com (สั้นเกินไป)
console.log(maskEmailAdvanced('ab@example.com', '#', 1, 1)); // a#b@example.com
console.log(maskEmailAdvanced('john.doe@company.org', 'x', 2, 2)); // joxxxxoe@company.org
Mask Domain ด้วย (Optional)
const maskFullEmail = (email) => {
const [local, domain] = email.split('@');
const [domainName, tld] = domain.split('.');
const maskLocal = local[0] + '*'.repeat(local.length - 2) + local.slice(-1);
const maskDomain = domainName[0] + '*'.repeat(domainName.length - 1);
return `${maskLocal}@${maskDomain}.${tld}`;
};
console.log(maskFullEmail('ramkumar@example.com')); // r******r@e******e.com
สรุป
- ฟังก์ชันพื้นฐานทำงานได้ดีสำหรับอีเมลทั่วไป
- ควรเพิ่ม validation และรองรับกรณีขอบ (ชื่อสั้น, ไม่มี @, ฯลฯ)
- สามารถปรับจำนวนตัวอักษรที่แสดงได้ตามนโยบายความปลอดภัย