【发布时间】:2010-09-06 19:27:17
【问题描述】:
首先让我们根据我的要求定义一个“URL”。
可选允许的唯一协议是http:// 和https://
然后是一个强制性域名,例如stackoverflow.com
然后是可选的其余 url 组件(path,query,hash,...)
根据我的要求参考有效和无效网址的列表
有效
- stackoverflow.com
- stackoverflow.com/questions/ask
- https://stackoverflow.com/questions/ask
- http://www.amazon.com/Computers-Internet-Books/b/ref=bhp_bb0309A_comint2?ie=UTF8&node=5&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=browse&pf_rd_r=0AH7GM29WF81Q72VPFDH&pf_rd_t=101&pf_rd_p=1273387142&pf_rd_i=283155
amazon.com/Computers-Internet-Books/b/ref=bhp_bb0309A_comint2?ie=UTF8&node=5&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=browse&pf_rd_r=0AH7GM29WF81Q72VPFDH&pf_rd_t=101&pf_rd_p=1273387142&pf_rd_i=283155
http://test-site.com(filter_var 拒绝这个!!!我有带破折号的域名)
无效
-
http://www(php filter_var 允许这个,是的,我知道是
validurl) - 谷歌
- http://www..des(php filter_var 允许这个)
- 域名中包含不允许字符的任何网址
为了完整起见,这里是我的 php 版本:5.3.2-1ubuntu4.2
【问题讨论】:
-
您的 TLD 下的域名带有破折号?给我看。
-
我希望你知道现在有 internationalized domain names 可以使 URL 验证正则表达式变得非常混乱。
-
此外,“有效”URL 可以包含很多内容,但您的问题中没有指定。有关完整规范,请参阅:w3.org/Addressing/URL/url-spec.txt
-
@Pekka expert-sex-change.com 用于重定向到 stackoverflow.com(现已过期)
-
@Null aarrgh,当然,我把它和下划线
_混在一起了。我自己拥有许多带有破折号的域。我该收工了!不过,我不明白 filter_var 如何拒绝这个。
标签: php regex validation url