Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用regexp验证Url_Php_Regex_Url - Fatal编程技术网

Php 使用regexp验证Url

Php 使用regexp验证Url,php,regex,url,Php,Regex,Url,可能的重复项: 我正在使用 (((?:http|https):\/\/[a-zA-Z0-9\/\?=_#&%~-]+(\.[a-zA-Z0-9\/\?=_#&%~-]+)+)|(www(\.[a-zA-Z0-9\/\?=_#&%~-]+){2,})) 验证脚本中的URL 但是我的朋友告诉我这个URL有一个问题: http://www.example.com/example(200)aaaa.rar 如何将“(”和“)”添加到我的regexp语句中 我应该在我的re

可能的重复项:

我正在使用

(((?:http|https):\/\/[a-zA-Z0-9\/\?=_#&%~-]+(\.[a-zA-Z0-9\/\?=_#&%~-]+)+)|(www(\.[a-zA-Z0-9\/\?=_#&%~-]+){2,}))
验证脚本中的URL

但是我的朋友告诉我这个URL有一个问题:

http://www.example.com/example(200)aaaa.rar
如何将“
”和“
”添加到我的regexp语句中


我应该在我的regexp中添加其他字符吗?

我可以推荐这个网站吗: 单击顶部的浏览并选择Uri按钮

不过为了回答你的问题,
(((?:http://https):\/\/[a-zA-Z0-9\/\?=\\&%~-]+([a-zA-Z0-9\/\?=\\\&%~-]+))(www


注意
\)
\(
在结尾处。它们必须转义(前缀为
\
),因为它们是用于在正则表达式中分组的字符。

我相信该规范将回答您的问题,尽管您需要在旅途中解开BNF靴子的包装

总之,除了少数必须转义的保留字符外,域名后面几乎可以使用任何字符:

BNF[在RFC中]包括RFC 1738指定的有效URL中不允许的国家字符,因为HTTP服务器不受允许表示地址的rel_路径部分的无保留字符集的限制,HTTP代理可能接收RFC 1738未定义的URI请求


PHP已经有了一种验证URL的方法,它比您的正则表达式(正如我在上面所评论的,它允许误报)工作得更好:


您使用的是什么正则表达式引擎?根据您的正则表达式,www.foo.#%~是一个有效的URL。您使用的任何语言都可能已经有一个URL验证器,该验证器工作得更好。@Paul:不工作的东西不工作了吗?我没有提出任何建议,只是指出了一个可能的重复?如果不考虑所有这些,它就不工作了(不幸的是)现在使用非ASCII字符的有效国际化域。我对该站点的格式不是100%熟悉。因此,其中缺少一些字符,这就是为什么我假设您可以找到一个可以找到答案的源,而答案不会受损。@GCATNM:非常正确,但我不认为(尽管我可能错了)它们看起来是包罗万象的。语法错误:未终止的插入语
$url = "http://www.example.com/example(200)aaaa.rar";
var_dump(filter_var($url, FILTER_VALIDATE_URL));