【问题标题】:Url validation with preg_match使用 preg_match 进行 URL 验证
【发布时间】:2016-09-06 08:24:01
【问题描述】:

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

    $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');
    }

【问题讨论】:

  • Youtube 也有 youtu.be 域,以及指向您发布的同一视频的 youtu.be/DBK-Cy9ge4M 链接。您还应该允许这些视频(恕我直言)。

标签: php validation url preg-match


【解决方案1】:

您可以使用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 的 URL 中。

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

【讨论】:

    【解决方案2】:

    将有两种选择- 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。 strops 为 (Ruslan Osmanov)-

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

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 2018-11-29
      • 1970-01-01
      • 2018-10-11
      • 2012-02-09
      • 1970-01-01
      • 2010-11-19
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多