【问题标题】: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');
}
【问题讨论】:
标签:
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');
}