如何解决另一种正则表达式来匹配url
| 此正则表达式的每个部分都可以单独工作,但是当我将它们串在一起时,它与带有http或www的URL不匹配,后跟列出的TLD之一。(preg_match(\'/http\\:\\/\\/(www\\.)?[a-z](\\.com|\\.org|\\.net|\\.mil|\\.edu|\\.COM|\\.ORG|\\.NET|\\.MIL|\\.EDU)$/\',$bandUrl))
解决方法
您可能在
[a-z]
之后遗漏了+
(顺便说一句,它不匹配所有有效的URL)。而不是同时列出大写和小写的.TLD,您可以使用/i
标志:
preg_match(\'/http\\:\\/\\/(www\\.)?[a-z]+(\\.com|\\.org|\\.net|\\.mil|\\.edu$/i\',
顺便说一句,您也可以使用filter_var($url,FILTER_VALIDATE_URL)
进行测试。
, 您的[a-z]
仅可匹配一个字符(即www.a.com)。最好将它做成[a-z0-9\\-]+
之类的东西。请注意,“ 1”表示多个。
, 不要使用正则表达式。
filter_var(\'http://www.example.com\',FILTER_VALIDATE_URL);
, 对于匹配的URL,以下代码应该起作用:
<?php
$regex = \"((https?|ftp)\\:\\/\\/)?\"; // SCHEME
$regex .= \"([a-z0-9+!*(),;?&=\\$_.-]+(\\:[a-z0-9+!*(),;?&=\\$_.-]+)?@)?\"; // User and Pass
$regex .= \"([a-z0-9-.]*)\\.([a-z]{2,3})\"; // Host or IP
$regex .= \"(\\:[0-9]{2,5})?\"; // Port
$regex .= \"(\\/([a-z0-9+\\$_-]\\.?)+)*\\/?\"; // Path
$regex .= \"(\\?[a-z+&\\$_.-][a-z0-9;:@&%=+\\/\\$_.-]*)?\"; // GET Query
$regex .= \"(#[a-z_.-][a-z0-9+\\$_.-]*)?\"; // Anchor
?>
Then,the correct way to check against the regex ist as follows:
<?php
if(preg_match(\"/^$regex$/\",$url))
{
return true;
}
?>
Courtesy:
splattermania在PHP手册上发表的评论:http://php.net/manual/en/function.preg-match.php
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。