使用preg_match验证网址

时间:2016-05-11 05:53:17

标签: php validation url preg-match

我想确保链接来自所选的社交类型。 帮助!!

    $socialType = 'youtube';
    $link = 'https://www.youtube.co.uk/watch?v=DBK-Cy9ge4M';

    if (!preg_match("/^(http|https):\\/\\/[a-z0-9_]+$socialType*\\.[_a-z]{2,5}"."((:[0-9]{1,5})?\\/.*)?$/i",$link)) 
    {
         return Response::json('inValid'); 
    }
    {
         return Response::json('Valid');
    }

2 个答案:

答案 0 :(得分:0)

如果链接包含使用strpos

的子字符串,则可以直接检查
$link = 'https://www.youtube.co.uk/watch?v=DBK-Cy9ge4M';
$type = 'youtube';

if (strpos($link, $type) !== false) {
  // passed
}

如果您想要更严格的检查,请使用简单的正则表达式:

$reg_type = preg_quote($type, '/');

if (preg_match("/^https?:\/\/(www\.)?$reg_type/", $link)) {
  // passed
}

注意,您应该使用preg_quote转义传递给正则表达式的值。

模式应该足够了。不要过于复杂。通常不可能写出完美的正则表达式。例如,它不太可能找到HTTP(S)协议前缀+可选" www。" +" youtube。"在不属于Youtube的网址中。

另外,我不希望通过各种社交网络的通用正则表达式得到答案。每个都有自己的模式。

答案 1 :(得分:0)

将有两种选择 - 1.使用preg_match -

$subject = "https://www.youtube.co.uk/watch?v=DBK-Cy9ge4M";
$pattern = '/^youtube/';
preg_match($pattern, substr($subject,7), $matches);
print_r($matches);

2。 (Ruslan Osmanov饰演) -

$socialType = 'youtube';
$link = 'https://www.youtube.co.uk/watch?v=DBK-Cy9ge4M';
if (strpos($link, $socialType) !== false) {
    return Response::json('Valid');
}