Validate / Normalize Email
validate_email · validity · text
2026-09-23
กำลังประมวลผล…
validate_email · validity · text
2026-09-23
อีเมลเป็นกุญแจที่ใช้บ่อยที่สุดในการรวมข้อมูลลูกค้า แต่ A@x.com กับ a@x.com ถูกนับเป็นคนละคนถ้าไม่จัดรูปแบบก่อน เทคนิคนี้ตรวจว่าค่าเป็นอีเมลที่ใช้ได้จริงหรือไม่ และจัดรูปแบบให้เทียบกันได้ โดยค่าเริ่มต้นจะเพียง ทำเครื่องหมาย ค่าที่ไม่ผ่านไว้ในคอลัมน์ใหม่ ไม่ลบให้เอง
split_column ก่อน@ หนึ่งตัว มีโดเมนที่มีจุดอย่างน้อยหนึ่งจุด และไม่มีช่องว่าง โดยความยาวรวมไม่เกิน 254 ตัวอักษรlowercase เปลี่ยนทั้งค่าเป็นตัวพิมพ์เล็ก ทำให้เทียบกันได้stripPlusTag ตัดส่วนหลัง + ในชื่อผู้ใช้ออก ซึ่งผู้ให้บริการส่วนใหญ่ถือว่าเป็นกล่องเดียวกันaction กำหนดชะตากรรมของค่าที่ไม่ผ่าน — flag เพิ่มคอลัมน์บอกผล null ทำให้เป็นค่าว่าง และ remove_row ลบทั้งแถว| Parameter | Type | Default |
|---|---|---|
column | string | — |
action | flag | null | remove_row | "flag" |
newColumnName | string | — |
lowercase | boolean | true |
stripPlusTag | boolean | false |
import json
import re
EMAIL = re.compile(r'^[^\s@,;:<>()\[\]\\"]+@[^\s@.]+(\.[^\s@.]+)+$')
def validate_email(value, lowercase=True, strip_plus_tag=False):
if value is None:
return {'value': None, 'valid': None}
text = str(value).strip()
if len(text) > 254 or not EMAIL.match(text):
return {'value': value, 'valid': False}
local, _, domain = text.rpartition('@')
if strip_plus_tag:
local = local.split('+')[0]
if local == '':
return {'value': value, 'valid': False}
address = f'{local}@{domain}'
return {'value': address.lower() if lowercase else address, 'valid': True}
values = [' Poom@Example.COM ', 'user+news@mail.co.th', 'ไม่ใช่อีเมล', None]
print(json.dumps([validate_email(v, strip_plus_tag=True) for v in values], ensure_ascii=False))
รายชื่อผู้สมัคร 5,000 แถวจะถูกนำไปรวมกับฐานลูกค้าเดิม รัน validate_email แบบ flag ก่อนเพื่อดูว่ามีกี่แถวที่รูปแบบผิด เปิดคอลัมน์ผลลัพธ์ดูตัวอย่างค่าที่ไม่ผ่าน ถ้าเป็นการพิมพ์ตกอย่าง a@x ให้แก้ที่ต้นทาง เมื่อพอใจแล้วค่อยเปลี่ยนเป็น remove_row หรือ null ตามนโยบายของงาน
ใช้ remove_duplicate_by_column ต่อเมื่อจัดรูปแบบอีเมลแล้ว ใช้ validate_regex เมื่อต้องการกฎเฉพาะขององค์กร และใช้ mask_pii ก่อนส่งไฟล์ให้ผู้อื่น