在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:#@%/;$()~=\.&-]+