我想确保链接来自所选的社交类型。帮助
$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');
}
将有两个选项作为-1.带预匹配-
$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');
}
您可以简单地使用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
对传递到正则表达式中的值进行转义。
这种模式应该足够了。不要过于复杂。通常不可能写出一个完美的正则表达式。例如,在不属于youtube的URL中,很难找到HTTP(S)协议前缀+可选的"www."+"youtube."。
此外,我不希望用一个适用于各种社交网络的通用正则表达式来得到答案。每个都有自己的模式。