当前位置:首页 > 运维技术 > 正文

域名格式怎么验证?域名注册规范详解

要验证一个字符串是否符合域名格式,需满足以下规则:

域名格式怎么验证?域名注册规范详解 第1张

  1. 域名结构

    • 由多个标签(Label)组成,标签间用点()分隔。
    • 标签数量至少为1(如 localhost 是有效的)。
    • 标签不能为空(如 .com 或 example. 无效)。
  2. 标签规则

    域名格式怎么验证?域名注册规范详解 第2张

    • 长度:每个标签长度在 1 到 63 个字符之间。
    • 字符集:仅允许字母(a-z, A-Z)、数字(0-9)和连字符(-)。
    • 起始/结束字符:标签不能以连字符开头或结尾(如 -abc 或 abc- 无效)。
  3. 总长度

    域名格式怎么验证?域名注册规范详解 第3张

    整个域名(包括分隔符点)总长度不超过 255 个字符。

实现代码(Python)

def is_valid_domain(domain: str) -> bool: # 检查总长度 if len(domain) > 255: return False # 分割标签 labels = domain.split('.') # 检查标签数量(至少1个) if len(labels) == 0: return False for label in labels: n = len(label) # 标签长度检查 (1-63) if n == 0 or n > 63: return False # 标签首尾不能是连字符 if label.startswith('-') or label.endswith('-'): return False # 字符合法性检查 for char in label: if not (char.isalnum() or char == '-'): return False return True

测试用例

域名示例 是否有效 原因
"example.com" 符合所有规则
"localhost" 单标签有效
"sub.domain.org" 多标签有效
"a-b.c0m" 允许连字符和数字
空域名无效
".com" 空标签无效
"example..com" 连续点导致空标签
"-invalid.com" 标签以连字符开头
"invalid-.com" 标签以连字符结尾
"in valid.com" 包含空格(非法字符)
"toolonglabel."*64 标签长度超过63字符
"a"*255 总长度等于255有效
"a"*256 总长度超过255无效
"ünicode.com" 非ASCII字符(需IDN编码处理)

关键点说明

  • 国际化域名(IDN):上述代码仅支持ASCII字符,如需支持非ASCII字符(如中文、阿拉伯语),需先将域名转换为Punycode(如 "中国.cn" → "xn--fiqs8s.cn")再验证。
  • 大小写处理:域名不区分大小写(EXAMPLE.COM 与 example.com 等价),验证时无需额外转换。
  • 特殊用途域名:如 localhost、.test 等保留域名,格式上有效,但实际使用需遵循特定规范。

此方案严格遵循ICANN域名格式标准,可直接用于基础域名格式校验。

0