【发布时间】:2009-07-02 14:00:47
【问题描述】:
我一直在尝试自己,并在网上搜索,写这个正则表达式但没有成功。
我需要验证给定 URL 是否来自特定域和格式正确的链接(在 PHP 中)。例如:
好域名:example.com
example.com 的 URL 非常好:
- http://example.com/so/this/is/good
- http://example.com/so/this/is/good/index.html
- http://www.examle.com/so/this/is/good/mice.html#anchortag
- http://anysubdomain.example.com/so/this/is/good/wow.php
- http://anysubdomain.example.com/so/this/is/good/wow.php?search=doozy
不是来自 example.com 的糟糕 URL:
一些注意事项: 我不在乎“http”与“https”,但如果对您很重要,请始终假设“http” 将使用此正则表达式的代码是 PHP,所以要加分。
2010 年更新:
Gruber 添加了一个很棒的 URL 正则表达式:
?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
查看他的帖子:An Improved Liberal, Accurate Regex Pattern for Matching URLs
【问题讨论】:
-
您的“Good Domain”示例不是有效的 URL(缺少路径)。
-
@Nikolar Ruhe:路径实际上是可选的:"http://" hostport [ "/" hpath [ "?"搜索 ]](参见 RFC 1738)
-
这并不表示有效的 URL,而是表示示例 URL 使用的有效域,但也许我应该只说“blah.com”,仅此而已。无论哪种方式,我都认为这是有道理的。
-
example.com:25 是好是坏?还有user@example.com ?