Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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中检查有效的web地址、正则表达式_Php_Regex_Validation - Fatal编程技术网

在PHP中检查有效的web地址、正则表达式

在PHP中检查有效的web地址、正则表达式,php,regex,validation,Php,Regex,Validation,我有这个文本输入,我需要检查字符串是否是有效的网址,比如http://www.example.com。如何在PHP中使用正则表达式?发现: (http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? 从这里开始: 您需要先了解网址,然后才能开始有效地解析它。是的,是一个有效地址。www.example.com也是如此。或者example.com。或或prefi

我有这个文本输入,我需要检查字符串是否是有效的网址,比如
http://www.example.com
。如何在PHP中使用正则表达式?

发现:

(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
从这里开始:


您需要先了解网址,然后才能开始有效地解析它。是的,是一个有效地址。www.example.com也是如此。或者example.com。或或prefix.example.com

看看URI的规范,特别是。

我从

//URL:不同的URL部分
//协议、域名、页面和CGI参数被捕获到反向引用1到4中
“\b((?#协议)https?| ftp):/(?#域)[-A-Z0-9.]+(?#文件)/[-A-Z0-9+&@#/%=~ |!:,;]*)(?#参数)\?[-A-Z0-9+&=|!:,]*)”
//URL:不同的URL部分
//协议、域名、页面和CGI参数被捕获到命名的捕获组中。
//与.NET一样工作,并在使用Python、PHP/preg和PCRE的“使用”页面上通过RegexBuddy进行转换之后。
“\b(?https?| ftp):/(?[-A-Z0-9.]+)(?/[-A-Z0-9+&-/%=~!:,。]*)(?\?[-A-Z0-9+&-/%=~!:,。]*)”
//URL:全文查找
//最后一个字符类确保,如果URL是某些文本的一部分,则使用标点符号,例如
//URL后的逗号或句号不解释为URL的一部分。
“\b(https?| ftp |文件):/[-A-Z0-9+&@#/%?=~ |!:,.;]*[-A-Z0-9+&@#/%=~ |”
//URL:用HTML链接替换URL
preg|u replace(“\b(https?| ftp |文件):/[-A-Z0-9+&@#/%?=~!:,.;]*[-A-Z0-9+&@#/%=~ |],”,“,$text);
使用:


这将比您可以编写的任何正则表达式都更加健壮。

在大多数情况下,您不必检查字符串是否为有效地址

要么是,网站将可用,要么不是,用户将直接返回

您应该只转义非法字符以避免XSS,如果您的用户不想提供有效的网站,这应该是他的问题

(在大多数情况下)


PS:如果您仍然想检查URL,请查看nikic的答案。

要匹配更多协议,您可以执行以下操作:

((https?|s?ftp|gopher|telnet|file|notes|ms-help)://)?[\w:#@%/;$()~=\.&-]+

“www.mywebsite.com”将不是有效的网站here@Colin赫伯特:
www.mywebsite.com
在任何地方都不是有效的网站,除非您在地址栏中键入它(此处假定
http://
)。在大多数其他情况下,假定它是一个文件名(因此是一个相对路径)。因此,如果你想验证它或不验证它,这取决于你的具体使用情况(就个人而言,如果不存在,我会预先编写
http://
,然后运行这样的检查,或者
filter\u var
)。@ircmaxell请参阅@Gabriel的帖子“www.mywebsite.com”上的评论将不是有效的网站here@Colin赫伯特:
www.mywebsite.com
不是一个绝对的URL;它将只被解释为URL路径。@Gumbo,它仍然是一个有效的网站,如果需要,可以/应该在输出中添加“http://”部分。@Colin HEBERT:如果输入到位置栏中,这只是web浏览器的允许范围。但它仍然不是有效的绝对URL。@Gumbo,需要URL的网站也应该这样做。检查给定的url是否以[protocol]://开头非常容易,如果不是,则添加http://即可。例如,在您的个人资料中,SO:)语法有效和/或语义有效?nikic的答案是完美的,这是:。谢谢各位。
filter_var($url, FILTER_VALIDATE_URL);
((https?|s?ftp|gopher|telnet|file|notes|ms-help)://)?[\w:#@%/;$()~=\.&-]+