使用正则表达式验证URL

时间:2010-11-17 18:14:24

标签: php regex url

  

可能重复:
  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

如何在我的正则表达式声明中添加“(”和“)”?

我应该在我的正则表达式中添加其他字符吗?

3 个答案:

答案 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的请求