确定URL是否包含某个主机名

时间:2011-11-27 17:13:56

标签: php preg-match

我需要为php preg_match制作一个正则表达式,它会进行以下匹配。

这是功能

function isValidURL($url,$searchfor){
    return preg_match("/\b.$searchfor \b/i", $url);
}

我需要在下面找到somedomain.com 可能的字符串进入函数

http://www.somedomain.com
http://somedomain.com
http://www.somedomain.com/anything
http://somedomain.com/anything
http://anything/somedomain.com

所以我需要一个执行此操作的正则表达式

http://www.somedomain.com           Will Match
http://somedomain.com               Will Match
http://www.somedomain.com/anything  Will Match
http://somedomain.com/anything      Will Match

http://anything/somedomain.com      Will NOT match

3 个答案:

答案 0 :(得分:2)

试试这个......

$url = "http://komunitasweb.com/";
if (preg_match('/^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?   (d+)?/?/i', $url)) {
    echo "Your url is ok.";
} else {
    echo "Wrong url.";
}

从谷歌搜索复制“php url正则表达式”。检查谷歌,真棒工具。 : - )

答案 1 :(得分:2)

如何使用parse_url()

if( strpos(parse_url($url, PHP_URL_HOST), 'somedomain.com') !== false )
{
  // hostname contains 'somedomain.com'.
}

答案 2 :(得分:1)

所有这些要求是URL开头的占位符。排除带有否定字符类[^/]的斜杠可能已经足够了:

function isValidURL($url,$searchfor){
    return preg_match("~http://[^/\s]*\.$searchfor(/|$|\s)~i", $url);
}

请注意,这会使某些边缘情况失败,例如user:pw@对。不知道你的$searchfor是否应该包含TLD。另外,请不要忘记preg_quote它。