Php parse_url在与正则表达式组合时是否可以检测到格式错误的url?

Php parse_url在与正则表达式组合时是否可以检测到格式错误的url?,php,regex,parsing,url,Php,Regex,Parsing,Url,考虑以下代码,该代码大量尝试检测可能的URL(任何由于点和字符组合而看起来模糊地像域名的内容),并尝试对其进行解析: if ( preg_match( '/[a-z\.0-9]+\.[a-z]{2,6}/i', $text, $possibleUrl ) ) { $urlResult = parse_url( 'http://' . $possibleUrl[0] ); echo $urlResult === false ? 'malformed URL' : 'parseabl

考虑以下代码,该代码大量尝试检测可能的URL(任何由于点和字符组合而看起来模糊地像域名的内容),并尝试对其进行解析:

if ( preg_match( '/[a-z\.0-9]+\.[a-z]{2,6}/i', $text, $possibleUrl ) ) {
    $urlResult = parse_url( 'http://' . $possibleUrl[0] );
    echo $urlResult === false ? 'malformed URL' : 'parseable URL';
}
是否可以为该代码提供一个输入值,用于生成格式错误的URL的
$text

TL;医生:没有

长答案:
parse_url
(参见php的C源代码:ext/standard/url.C
php_url\u parse_ex()
函数)不会检查方案(即这里的
http://
)和后续的
@
之间任何输入的有效性;它只是假设它是主体部分。[注意:对于
@
,它将其后面的零件视为主机。]


您的正则表达式只允许字符
[a-zA-Z0-9.]
,因此它在任何情况下都会被识别为主机部分。

parse\u url
是解析器,而不是验证器
$text='它在任何方面都不是url'结果仍然是“可解析URL”。验证器是这样的:我不是想验证,只是想检测。多亏了这个问题的答案,我可能会放弃对
parse\u url
的调用。