谁能说出我在这个正则表达式中的错误是什么


Could any one say what is the my mistake in this regex

我想使用这个正则表达式来验证我的 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