域名验证器(RFC合规性检查)
检查域名是否符合RFC 1035/1123语法规则。逐项验证标签长度、总长度、允许字符和连字符位置,如有违规会显示具体原因。
使用提示
- 本工具依据RFC 1035/1123规定的语法规则进行验证,并不检查该域名是否实际已注册或可通过DNS解析。
- 在为表单自行编写校验正则表达式之前,先用本工具确认边界情况(恰好63个字符、连字符位置等)的判定结果,有助于避免实现中的疏漏。
- 包含非ASCII字符(如日语域名)的输入仅会跳过字符集检查。如需精确验证,请先使用Punycode转换工具转换为`xn--`表示后再输入。
- 顶级域名全为数字的情况在实际中几乎不会出现,但特意将其纳入检查项,以便在表单校验时防止与IP地址混淆。
- 同样的规则也可直接应用于电子邮件地址中`@`之后的部分(域名部分),因此也可用作邮箱域名的简易检查。
常见问题
根据RFC 1035,标签(由`.`分隔的每一部分)为1〜63个字符,域名整体最多253个字符(源自二进制传输格式中255字节的限制)。不过各注册局的政策可能会在此基础上施加更严格的限制。
根据RFC 1035/1123,主机名中只允许使用字母、数字和连字符,不允许使用下划线。不过在TXT或SRV等非主机名用途的DNS记录标签中(例如`_dmarc.example.com`),下划线是被使用的。
RFC 1123规定每个标签必须以字母数字字符开头和结尾。若在开头或结尾允许使用连字符,会使解析变得模糊,并可能与旧版DNS实现产生兼容性问题,此规定正是为了避免这种情况。
包含日语等字符的国际化域名(IDN)在注册到DNS之前,必须先转换为Punycode(以`xn--`开头的ASCII表示)。由于本工具设计为验证Punycode转换后的字符串,建议先用Punycode转换工具将非ASCII域名转换后,再使用本工具进行语法检查。
闲话 ― 为何「域名验证」总是被反复重新发明
域名的语法检查乍看之下似乎只需一个简单的正则表达式即可完成,但实际上许多开发者都曾在自行实现时栽过跟头。无论是表单中的邮箱验证、配置文件中的主机名解析,还是API中的URL校验,各种场景都需要处理「类似域名的字符串」,然而能够准确反映RFC 1035(1987年)和RFC 1123(1989年)正式规则的实现却并不多见。
例如「每个标签不超过63个字符」「整体不超过253个字符」这一两级长度限制,源自DNS二进制传输格式(实际在网络上交换的二进制格式)的设计。每个标签前面都会放置一个表示长度的字节,而该字节的取值被限制在0〜63(6位可表示的最大值)之内,这正是标签长度限制的直接原因。
顶级域名不应全为数字这一惯例也有其有趣的历史。这并非RFC中明文规定的强制规则,而是作为区分IPv4地址(数字与点组成的序列)和域名的一种实现智慧被广泛采纳。许多DNS解析器和浏览器正是利用这一惯例,将「192.168.1.1」这样的字符串判定为IP地址而非域名。