搞过开发的都知道,验证域名就像吃鱼挑刺——看着简单,一不留神就卡喉咙。去年我们团队就栽过跟头,用了个漏洞百出的正则表达式,结果让黑客注入了上百个非法子域名。今天咱们就掰开揉碎聊聊,如何写出既严谨又高效的域名正则。
基本结构拆解
Q:最基础的域名正则长啥样?
先看这个万能模板:^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$
解释下关键点:
- 开头不用www → 允许直接匹配根域名
- 中横线防连续 → 禁止出现"my--site"这种格式
- 后缀长度≥2 → 兼容.com/.io等传统域名
但注意!这个正则漏掉了三个重要情况:
- 新顶级域名如.blog/.app
- 国际化域名(IDN)
- 带端口号的场景
举个实际翻车案例,某电商平台用[a-z0-9]+\.[a-z]{2,4}$
匹配域名,结果无法识别.london这种地理后缀,导致促销链接全部失效。
进阶技巧实战
处理国际化域名(IDN)的秘诀:^xn--[a-z0-9]+(-[a-z0-9]+)*\.[a-z]{2,}$
这里有个冷知识:中文域名在底层会被转码成xn--开头的ACE字符串。比如"中文.com"实际存储为"xn--fiq
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。