Validate URL
validate_url · validity · text
2026-09-23
กำลังประมวลผล…
validate_url · validity · text
2026-09-23
คอลัมน์ลิงก์ที่กรอกเอง มักมีทั้ง https://example.com, example.com, www.example .com และข้อความที่ไม่ใช่ลิงก์เลย เทคนิคนี้แยกออกว่าค่าไหนเป็น URL ที่ใช้ได้จริง โดยไม่ต้องเปิดเว็บนั้น และจัดรูปแบบให้เทียบกันได้เมื่อต้องการ
requireScheme ปิดอยู่ จะลองเติม scheme แรกใน allowedSchemes ให้ก่อนตรวจnormalize เปิดเมื่อต้องการให้ผลลัพธ์เป็นรูปแบบมาตรฐาน เช่น ทำโฮสต์เป็นตัวพิมพ์เล็กและเติม / ท้าย| Parameter | Type | Default |
|---|---|---|
column | string | — |
action | flag | null | remove_row | "flag" |
newColumnName | string | — |
requireScheme | boolean | true |
allowedSchemes | string[] | ["http","https"] |
normalize | boolean | false |
import json
import re
from urllib.parse import urlsplit, urlunsplit
def validate_url(value, require_scheme=True, allowed=('http', 'https'), normalize=False):
if value is None:
return {'value': None, 'valid': None}
text = str(value).strip()
if text == '' or re.search(r'\s', text):
return {'value': value, 'valid': False}
has_scheme = re.match(r'^[a-z][a-z\d+.\-]*:', text, re.IGNORECASE) is not None
if not has_scheme and require_scheme:
return {'value': value, 'valid': False}
candidate = text if has_scheme else f'{allowed[0]}://{text}'
parts = urlsplit(candidate)
if parts.scheme.lower() not in allowed or parts.hostname in (None, ''):
return {'value': value, 'valid': False}
if not normalize:
return {'value': text, 'valid': True}
normalized = urlunsplit((parts.scheme.lower(), parts.netloc.lower(), parts.path or '/', parts.query, parts.fragment))
return {'value': normalized, 'valid': True}
values = ['https://datalaundry.lifebugs.dev/techniques', 'datalaundry.lifebugs.dev', 'ไม่ใช่ url', None]
print(json.dumps([validate_url(v) for v in values], ensure_ascii=False))
คอลัมน์ website ของฐานลูกค้ามีค่าที่ไม่มี https:// อยู่จำนวนมาก รันครั้งแรกด้วย requireScheme เปิดไว้เพื่อดูว่ามีกี่แถวที่ไม่ผ่าน ถ้าส่วนใหญ่เป็นเพียงการขาด scheme ให้ปิด requireScheme และเปิด normalize เพื่อเติมให้อัตโนมัติ แล้วตรวจ Preview ว่าค่าที่ได้ยังชี้ไปที่โดเมนเดิม
ใช้ find_replace เพื่อแก้รูปแบบที่ผิดซ้ำ ๆ ใช้ extract_pattern เพื่อดึงเฉพาะโดเมนออกมาเป็นคอลัมน์ใหม่ และใช้ validate_regex เมื่อต้องการกฎที่แคบกว่ามาตรฐาน URL