如何使用 Regex 和 PHP 验证域名?

2024-03-22

我想要一个仅验证域名而不验证完整 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, etc...

  • should验证域,例如:
    schools.k12, newTLD.clothing, good.photography, etc...

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

^(?!\-)(?:(?:[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 个字符在其文本表示中。
  • 每个标签可以包含字母、数字和连字符.
  • 标签不能start or end带连字符。
  • 顶级域名(后缀)不能是全数字.

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

See 演示在这里 https://regex101.com/r/IY4AVw/1(适用于 JS、PHP、Python)

更多信息:

  • 上面的正则表达式不支持IDN http://en.wikipedia.org/wiki/Internationalized_domain_names.

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

  • 登记机构可能会征收一些额外费用,具体规则 https://www.register.com/policy/domain-extension-rules.rcmx此正则表达式中未明确支持哪些内容。例如,.CO.UK and .ORG.UK必须至少包含 3 个字符,但少于 23 个字符(不包括扩展名)。此类规则是非标准的,可能会发生变化。如果无法维护,请不要实施它们。

  • 正则表达式很棒,但并不是解决所有问题的最佳有效、高性能的解决方案。因此,只要有可能,就应该使用本机 URL 解析器。例如蟒蛇的urlparse() https://docs.python.org/2/library/urlparse.html方法或 PHP 的parse_url() http://php.net/manual/en/function.parse-url.php方法...

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

规格和参考:

  • IETF:RFC1035 https://www.rfc-editor.org/rfc/rfc1035
  • IETF:RFC1123 https://www.rfc-editor.org/rfc/rfc1123#section-2.1
  • IETF:RFC2181 https://www.rfc-editor.org/rfc/rfc2181#page-13
  • IETF:RFC952 https://www.rfc-editor.org/rfc/rfc952
  • 维基百科:域名系统 http://en.wikipedia.org/wiki/Domain_Name_System#cite_ref-rfc1034_1-2

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Regex 和 PHP 验证域名? 的相关文章

  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • 如何在 WordPress 中按类别获取所有帖子

    我想在 WordPress 中按类别获取帖子 args array post type gt project postslist get posts args 0 gt WP Post 对象 ID gt 421 post author gt
  • jquery上传完成后重定向到新页面

    我正在尝试让这个 jquery 工具与我的网站一起使用以进行文件上传 https github com blueimp jQuery File Upload https github com blueimp jQuery File Uplo
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • 如何将行变成列?

    我有一个数据库 其中存储分组到项目中的关键字以及与每个关键字相关的数据 然后我显示每个项目的数据网格 每个关键字一行和几列 全部从同一个表 数据 中检索 我有 4 个表 关键字 项目 group keywords 和数据 keywords
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • Python 非贪婪正则表达式

    我如何制作一个像这样的Python正则表达式 这样 给定 a b c d e 蟒蛇匹配 b 代替 b c d 我知道我可以使用 代替 但我正在寻找一种更通用的解决方案 使我的正则表达式更加干净 有没有办法告诉python 嘿 尽快匹配这个
  • 正则表达式最多匹配五个单词

    我有一个正则表达式 a zA Z 0 9 1 5 它验证该单词包含字母数字字符和少数特殊字符 并且长度不应超过5人物 如何使此正则表达式接受最多五个与上述正则表达式匹配的单词 a zA Z 0 9 1 5 s a zA Z 0 9 1 5
  • 如何处理 AJAX 请求中的会话超时

    我相信你们都熟悉使用 AJAX 的投票系统 嗯 看那边 我有类似的东西 当你投票赞成或反对时 它使用 AJAX 从 votes php 请求新值 问题是我正在使用会话来获取用户 ID 因此一个人只能投票一次 如果他们在页面上坐了一个小时然后
  • 具有更改用户代理上下文的 file_get_contents 不起作用

    我正在尝试获取页面的阅读数和点赞数 网址是 https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg https mp weixin qq com s NPavBeHc8VdWXeSL6kfLRg 您必
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • Windows iis 7.0 上的 APC 不稳定

    我的 IIS 非常不稳定 因为它总是由于某种与 APC 相关的原因而重新启动 服务器的规格如下 Intel R Xeon CPU 3GHZ 3GHZ 2GB RAM 64bit APC 和服务器规格 3 1 7 dev PHP Versio
  • UTF-8、PHP、Win7 - 现在是否有解决方案可以使用 php 在 Win 7 上保存 UTF-8 文件名?

    更新 只是为了不让您阅读所有内容 PHP 开头 7 1 0alpha2 在 Windows 上支持 UTF 8 文件名 感谢阿纳托尔 贝尔斯基 根据 stackoverflow 上的一些链接 我找到了部分答案 https stackover
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • 为什么这些非捕获正则表达式组不能正常工作?

    所以我花了很多时间在另一个堆栈溢出问题上 同样的问题又出现在上一个问题上 非捕获组并没有像我期望的那样工作 至少我是这么认为的 这是一个愚蠢的例子 类似于其他人的 CSS 测试字符串 这是我的正则表达式 rgb S 这是测试字符串 1px
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时

随机推荐

  • 如何为钩子创建蹦床函数

    我对挂钩很感兴趣 我决定看看是否可以挂钩一些函数 我对使用 detours 这样的库不感兴趣 因为我想拥有自己做的经验 通过我在互联网上找到的一些资源 我能够创建下面的代码 这是基本的 但效果还不错 然而 当挂钩由多个线程调用的函数时 它被
  • 寻找在本地磁盘上存储数据的想法

    我在 XML 文件中存储了大量数据 大小为 173 MB 460 万行 并将其存储在 Windows 窗体应用程序的工作目录中 它是将数据表写入 XML 文件的结果 数据表最初是通过对 SQL 服务器的查询填充的 我将其存储在本地而不是从服
  • 使用 apache tika 获取 doc 文件中的嵌入资源

    我有包含文本和图像的 MS Word 文档 我想解析它们以获得 xml 结构 经过研究 我最终使用 apache tika 来转换我的文档 我可以将我的文档解析为 xml 这是我的代码 AutoDetectParser parser new
  • AVPlayerStatus 与 AVPlayerItemStatus

    问题是玩家状态返回AVPlayerStatusReadyToPlay在player currentItem status返回之前整整2秒AVPlayerItemStatusReadyToPlay 有人对为什么会发生这种情况有任何有用的解释吗
  • 通过类构造函数初始化成员变量STL向量

    我有以下代码似乎可以工作 class MapCell public int x y z void Test3DVector int size x int size y int size z vector lt vector lt vecto
  • 如何测试 Phoenix 套接字是否已终止?

    我正在寻找一种方法来测试套接字是否被终止 被测试的代码执行以下操作 def handle in logout payload socket do stop logout socket gt assign user nil end 和我的测试
  • Apache 反向代理 https 到 http

    我已经在这里和互联网上进行了大量的浏览 但我无法配置我的 apache 将 https 反向代理为 http 不过我觉得我已经很接近了 我遵循的所有示例似乎都适用于除我之外的每个人 而且我的设置非常简单
  • RuntimeError:应用程序“目录”中的“product_product_options”模型发生冲突

    版本信息 Python 3 4 Django 1 8 Oscar Commerce 版本 1 2 1 最终 我正在尝试定制Products在目录应用程序中文档 http django oscar readthedocs io en rele
  • 关于雪花中 util_db 的任何好的文档

    我正在寻找有关雪花中 util db 用途的信息 该帐户随数据库一起提供 找不到这方面的好的文档 UTIL DB 是初始帐户设置的一部分 包含一些用于加载数据的示例文件格式 这不使用任何数据存储 因此不会对您的帐户产生存储费用 如果需要 帐
  • 将实体框架代码优先中的 SQL Server 数据库字母列排序更改为顺序

    我需要首先关闭代码中的字母顺序 这是我的简化课程 public class Person Key Column PersonId public int Id get set MaxLength 50 public string Person
  • 无法使用 Az DevOps Pipelines API 6.0-preview.1 创建新管道

    我正在尝试使用此 API 端点创建新的管道 POST https dev azure com organization project apis pipelines api version 6 0 preview 1 https dev a
  • 如何设置表单下拉列表的样式?

    我在互联网上进行了广泛的搜索 但没有找到任何关于如何在表单中设置下拉列表的下拉部分样式的有用信息 我希望能指出正确的方向 谢谢 我已经研究同样的问题有一段时间了 想出了一个非常简单的解决方案 使用比下拉列表本身更短的保持器 div 我还使用
  • 如何判断 /bin/sh 中的文件是否早于 30 分钟?

    如何编写脚本来确定 bin sh 中的文件是否早于 30 分钟 不幸的是没有stat系统中存在命令 这是一个古老的Unix系统 http en wikipedia org wiki Interactive Unix http en wiki
  • 如何填充 C++ 字符串中的一个部分?

    有一个空格字符串 string str new string str gt resize width 我想 在某个位置填充长度字符 在C中它看起来像 memset str pos length 我如何用 C 字符串实现这一点 我尝试过 st
  • MySQL 按月和年过滤结果

    我的表格显示了各个国家 地区的搜索量以及搜索日期 我想要一个查询来显示 2012 年和 2013 年每个月的搜索量 我需要为月份添加单独的列 年份和搜索次数 我之前使用过下面的查询 该查询返回每周的搜索量 但我想将其更改为仅 2012 年和
  • 如何在maven 2中指定一串目标作为defaultGoal?

    我只是好奇 有没有办法指定您希望将一串目标作为 Maven 项目中的默认目标运行 有没有类似蚂蚁的
  • C# .net cf 中的 nmea 校验和

    我正在尝试编写自己的 nmea 解析器 因为我只需要来自 GPS 的一些信息 并且不需要解释所有消息 我遇到的问题是我的 nmea 消息验证器给了我一个错误的校验和 有人能看到我做错了什么吗 我正在使用这个想法Codepedia 计算和验证
  • PHP mb_split(),捕获分隔符

    preg split有一个可选的PREG SPLIT DELIM CAPTUREflag 它还返回返回数组中的所有分隔符 mb split才不是 有没有办法分割多字节字符串 不仅仅是UTF 8 而是所有类型 并捕获分隔符 我正在尝试制作一个
  • 未捕获(在承诺中)语法错误:意外的标记“<”,“<!DOCTYPE”...不是有效的 JSON

    Uncaught in promise SyntaxError Unexpected token lt
  • 如何使用 Regex 和 PHP 验证域名?

    我想要一个仅验证域名而不验证完整 URL 的解决方案 以下示例是我正在寻找的 example com gt true example net gt true example org gt true example biz gt true e