php - 如何使用 正规表达式 & Php验证域名?

  显示原文与译文双语对照的内容
67 0

我希望只有一个解决方案才能验证域名不是完整 url,以下示例是我要查找的内容:

domain.com -> true
domain.net -> true
domain.org -> true
domain.biz -> true
domain.co.uk -> true
sub.domain.com -> true
domain.com/folder -> false
domµ*$ain.com -> false

谢谢你

时间:原作者:0个回答

62 2

选定的答案不完整/错误。

正规表达式 Pattern ;

  • 不应验证域,例如:
    -domain.comdomain--.com-domain-.-.comdomain.000,等等 。

  • 应验证域,例如:
    schools.k12newTLD.clothinggood.photography 等等 。

在进一步研究之后,below 是最正确,跨语言和 compact Pattern 我可以提出:

^(?!-)(?:[a-zA-Zd-]{0,62}[a-zA-Zd].){1,126}(?!d+)[a-zA-Zd]{1,63}$

这里 Pattern 与规范中定义的规则的most*一致:

  • 每个标签/级别( 用点分开) 最多可以包含个字符的字符。
  • 完整域名的级别可能为 127 levels 。
  • 完整域名的文本表示长度不得超过字符。
  • 每个标签都可以由字母。数字和连字符组成。
  • 标签不能用连字符 start start end 。
  • 顶级域( 扩展) 不能为所有数字

Note:::::正规表达式 中不包括完整的域长度检查。它应该被本地方法 比如 strlen(domain) <= 253 检查。
Note:::::这里 Pattern 适用于大多数语言,包括 PHP 。Javascript 。python 。等等 。

请参见这里的演示( 用于 JS 。PHP 。python )

更多信息:

  • 正规表达式 above 不支持 IDN

  • 没有规范说明扩展( TLD ) 应该在 2和 6字符之间。它实际上支持 63个字符。请看当前的收费清单另外,有些网络内部使用自定义/伪名称。

  • 注册机构可能会强加一些额外的特定规则,这些规则在这个版本中不被明确支持。例如 .CO.UK.ORG.UK 必须至少有 3个字符,但小于 23,不包括扩展。这些规则是非标准的,可能会改变。如果无法维护,则不要实现它们。

  • 正规表达式 是伟大的,但不是对每个问题都有效的高效解决方案。因此,只要可能,就应该使用本机URL解析器。比如 的python urlparse() 方法或者 php parse_url() 方法的

  • 毕竟,这只是一种格式验证。正规表达式 测试未确认域名实际上已经配置/存在 !你应该通过发出请求来测试存在性。

规范&引用:

原作者:
60 0

请尝试使用这里表达式:

^(http[s]?://)?((w+).)?(([w-]+)?)(.[w-]+){1,2}$

它真正的作用

  • 可选的http/s://
  • 可选 www
  • 任何有效的字母数字名称( 包括- 和_ )
  • 1 或者 2的任何有效字母数字名称( 包括- 和_ )

验证示例

原作者:
...