检查字符串中的有效域名?

dem*_*mos 10 python regex api domain-name

我正在使用python,并希望使用简单的api或regex来检查域名的有效性.根据有效性,我是语法有效性,而不是域名是否实际存在于互联网上.

Ale*_*lli 15

任何域名是(语法上)有效的,如果它的标识符的点分隔的列表,每个不超过63个字符,由字母,数字和破折号(无下划线).

所以:

r'[a-zA-Z\d-]{,63}(\.[a-zA-Z\d-]{,63})*'
Run Code Online (Sandbox Code Playgroud)

将是一个开始.当然,这些天可能会允许一些非Ascii字符(一个非常新的开发),它会更改参数很多 - 你需要处理它吗?

  • @Amarghosh,根据RFC 1035,是的:但RFC也说"在为对象分配域名时,谨慎的用户将选择一个比这更谨慎的名称"(特别是每个标识符,它称之为'标签) ',以字母开头,整个域名限制为255个字节)."在你所接受的内容中保守自由,在接受的内容中保持自由"! - )因为RE无疑与"接受"有关,所以更好的是自由主义. (2认同)

Ama*_*osh 6

r'^(?=.{4,255}$)([a-zA-Z0-9][a-zA-Z0-9-]{,61}[a-zA-Z0-9]\.)+[a-zA-Z0-9]{2,5}$'
Run Code Online (Sandbox Code Playgroud)
  • Lookahead确保它至少有4个(a.in)和最多255个字符
  • 一个或多个长度在1到63之间的标签(以句点分隔),以字母数字字符开头和结尾,中间包含字母数字字符和连字符.
  • 其次是顶级域名(博物馆的最大长度为5)

  • 博物馆是6个字符,而不是5个. (2认同)