我想使用这个正则表达式在php中使用preg_match函数来验证我的url但是当我使用它时它会显示“Unknown modifier'&'” 有什么问题?
$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;
}
答案 0 :(得分:4)
看起来你忘了逃避正斜杠:
$urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";
应该是
$urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@\/&%=+\$_.-]*)?";
答案 1 :(得分:0)
GET Query中的/(斜杠)被视为正则表达式的终止。并且不是在你的正则表达式的末尾添加了/在ANCHOR行中。
所以你需要在&。
面前逃脱 $urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";
bvecomes
$urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@\/&%=+\$_.-]*)?";
这就是全部。
答案 2 :(得分:0)
您可以使用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