我想使用这个正则表达式来验证我的 php 中的 url preg_match函数,但当我使用它时,它说"未知修饰符'&'"问题出在哪里?
$urlregex = "/^(http|ftp|https)':'/'/";
// USER AND PASS (optional)
$urlregex .= "([a-z0-9+!*(),;?&='$_.-]+(':[a-z0-9+!*(),;?&='$_.-]+)?@)?";
// HOSTNAME OR IP
$urlregex .= "[a-z0-9+'$_-]+('.[a-z0-9+'$_-]+)+"; // http://x.x = minimum
// PORT (optional)
$urlregex .= "(':[0-9]{2,5})?";
// PATH (optional)
$urlregex .= "('/([a-z0-9+'$_-]'.?)+)*'/?";
// GET Query (optional)
$urlregex .= "('?[a-z+&'$_.-][a-z0-9;:@/&%=+'$_.-]*)?";
// ANCHOR (optional)
$urlregex .= "(#[a-z_.-][a-z0-9+'$_.-]*)?'$/";
if(preg_match($urlregex, $url) === 1)
{
$errors[] = "URL_ISNOTVALID";
$ok = false;
}
看起来你忘了转义正斜杠:
$urlregex .= "('?[a-z+&'$_.-][a-z0-9;:@/&%=+'$_.-]*)?";
应该是
$urlregex .= "('?[a-z+&'$_.-][a-z0-9;:@'/&%=+'$_.-]*)?";
GET 查询中的/(斜杠)被视为正则表达式的终止。而不是在 ANCHOR 行中添加的正则表达式末尾的/。
所以你需要在 &.
$urlregex .= "('?[a-z+&'$_.-][a-z0-9;:@/&%=+'$_.-]*)?";
布维科斯
$urlregex .= "('?[a-z+&'$_.-][a-z0-9;:@'/&%=+'$_.-]*)?";
就这样。
你可以通过使用filter_var
来省去一些麻烦。
if (false !== ($url = filter_var($url, FILTER_VALIDATE_URL))) {
echo "$url is a valid url";
}
您可以选择将这些选项添加为第三个参数(使用二进制或组合它们):
-
FILTER_FLAG_PATH_REQUIRED
-
FILTER_FLAG_QUERY_REQUIRED