gpt4 book ai didi

php - 如何使用正则表达式和 PHP 验证域名?

转载 作者:IT王子 更新时间:2023-10-29 00:04:18 25 4
gpt4 key购买 nike

我想要一个只验证域名而不是完整 URL 的解决方案,以下示例是我正在寻找的:

example.com -> true
example.net -> true
example.org -> true
example.biz -> true
example.co.uk -> true
sub.example.com -> true
example.com/folder -> false
exam*$ple.com -> false

最佳答案

接受的答案不完整/错误。

正则表达式模式;

  • 不应验证以下域:
    -example.com , example--.com , -example-.-.com , example.000等等……

  • 应该验证以下域:
    schools.k12 , newTLD.clothing , good.photography等等……

经过进一步研究;下面是我能想到的最正确、跨语言和紧凑的模式:

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

此模式符合规范中定义的大多数*规则:

  • 每个标签/级别(由点分隔)最多可包含 63 个字符
  • 完整的域名最多可以有 127 层
  • 完整域名的文本表示长度不得超过 253 个字符
  • 每个标签可以由字母、数字和连字符组成。
  • 标签不能以连字符开始结束
  • 顶级域(扩展名)不能全数字

注意 1:正则表达式中不包含完整域长度检查。它应该通过 native 方法简单地检查,例如strlen(domain) <= 253 .
注意 2:此模式适用于大多数语言,包括 PHP、Javascript、Python 等...

参见 DEMO here (适用于 JS、PHP、Python)

更多信息:

  • 上面的正则表达式不支持IDN

  • 没有规范规定扩展名 (TLD) 应介于 2 到 6 个字符之间。它实际上支持 63 个字符。查看当前TLD list here .此外,一些网络确实在内部使用自定义/伪 TLD。

  • 注册机构可能会征收一些额外费用,specific rules在此正则表达式中未明确支持。例如,.CO.UK.ORG.UK必须至少有 3 个字符,但少于 23 个,不包括扩展名。这些类型的规则是非标准的,可能会发生变化。如果您无法维护,请不要实现它们。

  • 正则表达式很棒,但不是解决所有问题的最有效、最高效的解决方案。因此,应尽可能使用 native URL 解析器。例如Python 的 urlparse() 方法或 PHP 的 parse_url() 方法...

  • 毕竟,这只是一个格式验证。正则表达式测试无法确认域名是否实际配置/存在!您应该通过发出请求来测试是否存在。

规范与引用:

更新 (2019-12-21):修复了带子域的前导连字符。

关于php - 如何使用正则表达式和 PHP 验证域名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3026957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com