判断域名合法性,正则表达式必须分段校验,不能靠一个万能正则套所有场景。 正则只负责格式校验,不管域名是否已注册、能否解析;格式合法和真实可用是两码事。
域名合法性正则表达式怎么写:先拆结构再写规则
域名结构规则
域名由一串标签组成,标签之间用点号分隔,业内对主机名格式的共识很统一:
- 完整域名不含末尾根点,最长253个字符。
- 单个标签最长63个字符,最短1个字符。
- 标签只允许英文字母、数字和中划线。
- 中划线不能出现在标签开头或结尾。
- 顶级域至少2个字符,必须为字母,不能是纯数字。
- 下划线、空格、通配符都不能出现在正规域名里。
基础正则表达式
下面这个模式可以覆盖大多数 ASCII 域名:
^(?=.{1,253}$)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?.)+[a-zA-Z]{2,63}$
它支持 example.com,也支持 sub.example.com.cn,如果希望放行末尾根点,example.com.,可以改成:
^(?=.{1,253}.?$)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?.)+[a-zA-Z]{2,63}.?$
在 Python 里直接调用:
import re
domain_regex = r"^(?=.{1,253}$)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?.)+[a-zA-Z]{2,63}$"
def is_valid_domain(value):
return bool(re.match(domain_regex, value, re.IGNORECASE))
JavaScript 也类似,正则末尾加 i 忽略大小写即可。
实际处理路径
处理用户输入时,先做清理,再做校验:
- 去掉
http://或https://。 - 按 拆分,取第一个部分。
- 去掉 后面的端口号。
- 去掉末尾的 。
- 最后交给域名正则。
这套步骤可以拦截 -baidu.com、baidu-.com、exa_mple.com 这类典型错误。
正则表达式判断域名和网址有什么区别
协议和路径必须剔除
很多人在表单里直接拿正则去匹配整个网址,结果把路径里的点也当成域名标签,导致误判,域名和网址的边界非常明确:
- 网址包含协议、主机、路径、查询参数。
- 域名只包含主机部分。
https://www.example.com/search里的域名是www.example.com,不是整个字符串。
实际操作用现成解析函数更稳,Python 可以用 urllib.parse.urlparse,拿到 hostname 后再走正则,没有解析函数时,就按上面的清理步骤拆。
端口不是域名的一部分
example.com:8080 中的 8080 是端口,不是标签,正则匹配域名前必须把端口去掉,如果不想引入额外解析逻辑,可以先用这个模式提取:
^([a-zA-Z0-9.-]+):d+$
再对捕获组做域名校验。
国内域名和国外域名校验差异
从正则角度看,国内域名和国外域名没有格式差异,都是同样的 DNS 标签规则,真正的差异在注册流程和合规要求,据工信部公开规定,在国内注册域名必须提交真实身份资料,完成实名认证;国外域名多数注册商只填注册信息,不需要单独做实名认证,正则校验在这两条路上都管不到,只能靠接口查注册状态和备案状态。
中文域名正则表达式怎么判断
先用 Punycode 转码
中文域名不能直接套 ASCII 正则,标准做法是先把中文转成 xn-- 开头的 Punycode 格式,再用同一套规则校验。
在 Python 中转换很简单:
"中国.cn".encode("idna").decode("ascii")
输出结果是类似 xn--fiqs8s.cn 的字符串,JavaScript 需要借助 URL 或第三方字符编码库完成转码,转码后再校验,就不会把中文字符当作非法字符直接拒绝。
具体校验步骤
- 输入中文域名。
- 转成 Punycode。
- 去掉协议、路径、端口。
- 运行 ASCII 域名正则。
实名认证是另一道关卡
中文域名通过正则后,仍然要过实名认证,正则确认的是字符串格式,实名认证确认的是使用主体,二者不能互相替代。
边界情况与常见误区
下划线和通配符
user_name.example.com 在 DNS 标准中不是合法主机名,但有些内网服务会使用下划线记录,公网域名校验时必须拒绝。.example.com 是通配符记录,不是域名本身,用户填写网站域名时同样不能通过。
纯数字顶级域
com 合法,因为顶级域是 com。www.123 不合法,因为根区目前没有纯数字顶级域,正则里的顶级域部分必须限定为字母,不能写成任意字符。
正则的边界
行业共识认为,正则校验只解决格式问题,不解决真实性问题,业内专家指出,要判断域名是否真的可用,必须补上 DNS 查询和 WHOIS 检查,格式正确但没注册的域名,正则看不出来。
域名合法性正则表达式常见问题
域名注册价格会影响正则校验吗
不影响,域名价格由注册商和注册局决定,和字符串长相无关,一个域名是否能通过正则,只取决于字符组合是否符合语法。
哪些场景必须用正则校验域名
用户注册、API 参数校验、日志解析、爬虫配置都需要,正则擅长拦截明显格式错误,但不适合判断域名是否已被注册、是否被墙、是否已备案,这些需要接口查询。
中文域名能直接用正则校验吗
不能,中文域名必须先用 Punycode 转成 ASCII,再交给同一套正则规则,直接拿中文字符去匹配 ASCII 字符集,结果一定是误报,先转码再校验是唯一可靠的处理路径。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/725203.html





