如何将随机域名转换为小写一致的网址?

时间:2015-07-04 10:22:10

标签: php regex oop url

我在课堂上有这个功能:

protected $supportedWebsitesUrls = ['www.youtube.com', 'www.vimeo.com', 'www.dailymotion.com'];

protected function isValid($videoUrl)
{
    $urlDetails = parse_url($videoUrl);

    if (in_array($urlDetails['host'], $this->supportedWebsitesUrls))
    {
        return true;
    } else {
        throw new \Exception('This website is not supported yet!');

        return false;
    }

}

它基本上从任意随机URL中提取主机名,然后检查它是否在$supportedWebsitesUrls数组中,以确保它来自支持的网站。但是如果我添加说:dailymotion.com而不是www.dailymotion.com,它就不会检测到该网址。此外,如果我尝试做WWW.DAILYMOTION.COM,它仍然无法工作。可以做些什么?请帮我。

2 个答案:

答案 0 :(得分:3)

您可以使用preg_grep functionpreg_grep支持针对给定数组的正则表达式匹配。

使用示例:

$supportedWebsitesUrls = array('www.dailymotion.com', 'www.youtube.com', 'www.vimeo.com');

$s = 'DAILYMOTION.COM';

if ( empty(preg_grep('/' . preg_quote($s, '/') . '/i', $supportedWebsitesUrls)) )
   echo 'This website is not supported yet!\n';
else
   echo "found a match\n";

<强>输出:

found a match

答案 1 :(得分:1)

你可以对它进行一些检查;

对于小写vs大写,php函数strtolower()会将你排除在外。

至于在开头与 www。进行核对与没有它的情况下,您可以对if子句添加额外的检查;

if (in_array($urlDetails['host'], $this->supportedWebsitesUrls) || in_array('www.'.$urlDetails['host'], $this->supportedWebsitesUrls))