regex - 检查 URL 时更改正则表达式以允许 IP 地址?

标签 regex url

我有以下正则表达式来检查 URL 是否有效:

preg_match('/^(http(s?):\/\/)?(www\.)?+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/i', $url);

我喜欢将这部分 [a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})(至少我希望它是粗体部分)修改为 IP 地址或突出显示的部分。

目前,正则表达式对我来说非常好,因为它可以正确地找到错误的 URL - 尽管我相信一旦 ICANN 的新域政策生效,这将开始无法正常工作(即 Google 可能想要 url http://search.google -而不是 http://google.com 用于搜索)

无论如何,我想添加允许 IP 地址也是有效 URL 的功能,但我不确定如何将其纳入正则表达式

如果有人能伸出援手,那就太好了!

最佳答案

这个正则表达式似乎有效:

^(http(s?):\/\/)?(((www\.)?+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+)|(\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b))(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$

在检查“http”之后的部分,它只是执行 OR 操作,以匹配域名或 IP。以下是相关摘录:
((www\.)?+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+)|(\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)

IP 表达式有点长,但它确保它是一个有效的 IP(例如,不是 999.999.999.999)。您可以轻松地将其替换为另一个 IP 检查。

在这里,它已合并到您之前的代码中:
preg_match('/^(http(s?):\/\/)?(((www\.)?+[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+)|(\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b))(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/i', $url);

关于regex - 检查 URL 时更改正则表达式以允许 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249420/

相关文章:

php - 加载剥离 javascript 并将其放入数组中供以后使用的替代方法是什么

java - 从 URL 获取并显示一系列图像

Python,需要帮助使用 mechanize 制作 'brute force'

javascript - 使用 Jquery 重定向到哈希 url

javascript - 在 .js 文件中获取应用程序根 URL

java - 无法通过 URL 连接从网站加载内容

regex - 如何在Perl中遍历正则表达式匹配变量?

python - 使用 entrez 和 biopython 在 medline 数据库中搜索标题

android - Flutter - 使用正则表达式验证电话号码

css - 查找 CSS 注释的正则表达式中不必要的星号