2016-05-11 13 views
1

リンクが選択したソーシャルタイプのものであることを確認します。 助けてください!preg_matchによるURL検証

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

YouTubeのも 'youtu.be'ドメインを持っています、https://youtu.be/DBK-Cy9ge4Mはあなたが投稿した同じビデオにリンクしています。あなたはまた、これらのビデオ(imho)を許可する必要があります。 – Arjan

答えて

0

するpreg_matchと 1.したままの二つのオプションがあります

$socialType = 'youtube'; 
$link = 'https://www.youtube.co.uk/watch?v=DBK-Cy9ge4M'; 
if (strpos($link, $socialType) !== false) { 
    return Response::json('Valid'); 
} 
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に属していないURLに

また、私はあらゆる種類のソーシャルネットワークの普遍的な正規表現で答えを得ることは期待しません。それぞれには独自のパターンがあります。 (ルスランOsmanov)としてstropsと

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

2 - -