可能重复:
PHP validation/regex for URL
PHP regex for validating a URL
我正在使用
(((?:http|https):\/\/[a-zA-Z0-9\/\?=_#&%~-]+(\.[a-zA-Z0-9\/\?=_#&%~-]+)+)|(www(\.[a-zA-Z0-9\/\?=_#&%~-]+){2,}))
在我的脚本中验证网址。
但是我的朋友告诉我这个网址有问题:
http://www.example.com/example(200)aaaa.rar
如何在我的正则表达式声明中添加“(
”和“)
”?
我应该在我的正则表达式中添加其他字符吗?
答案 0 :(得分:2)
PHP已经有办法验证网址filter_var
,这比你的正则表达式更好(正如我上面评论的那样,允许误报):
$url = "http://www.example.com/example(200)aaaa.rar";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
答案 1 :(得分:0)
我可以推荐这个网站:http://regexlib.com/ 单击顶部的“浏览”并选择“Uri”按钮。
尽管如此,(((?:http|https):\/\/[a-zA-Z0-9\/\?=#&%~-]+(.[a-zA-Z0-9\/\?=#&%~-]+)+)|(www(.[a-zA-Z0-9\/\?=_#&%~-\\)\\(]+){2,}))
注意结束时\)
和\(
。必须对它们进行转义(以\\
为前缀),因为它们是用于在正则表达式中进行分组的字符。
答案 2 :(得分:0)
我相信规范会回答你的问题RFC-2068,但你需要解开你的BNF靴子。
总之,在域名之后几乎可以使用任何字符,除了少数必须转义的保留字符:
BNF [在RFC中]包含RFC 1738指定的有效URL中不允许的国家字符,因为HTTP服务器不受限于允许表示地址的rel_path部分的非保留字符集,并且HTTP代理可能会收到对RFC未定义的URI的请求