[英]How to check if url is tel: or javascript: type
我卷曲一个URL并检测所有链接,但是我有一个问题,它也可以检测tel:,JavaScript:,Skype:,chrome:,sms:和...
我尝试使用下面的代码来检查URL是否正确,但这是太长的代码,并且没有包括所有可能性。 所以我想使用正则表达式但它不起作用
<?php
if($url==''){echo 'error';} // ignore self and blank links
else if(substr($url,0,strlen('#'))==='#'){echo 'error';} // ignore hash-tag links
else if(substr($url,0,strlen('javascript:'))==='javascript:'){echo 'error';} // ignore script links
else if(substr($url,0,strlen('data:'))==='data:'){echo 'error';} // ignore base64_decoded files
else if(substr($url,0,strlen('chrome:'))==='data:'){echo 'error';} // ignore chrome links
else if(substr($url,0,strlen('mailto:'))==='mailto:'){echo 'error';} // ignore email links
else if(substr($url,0,strlen('tel:'))==='tel:'){echo 'error';} // ignore mobile calls links
else if(substr($url,0,strlen('sms:'))==='tel:'){echo 'error';} // ignore SMS links
else if(substr($url,0,strlen('callto:'))==='callto:'){echo 'error';} // ignore skype calls second method links
else
{
echo $url;
}
?>
<?php
$url=$_GET['url'];
if(preg_match('^(?:[a-z]+:)?//',$url))
{
echo 'error';
}
else
{
echo $url;
}
?>
我希望URL是否为tel:或sms:或chrome:或类似的东西应该打印“错误”,否则应该在给定URL的情况下打印
如果要使用preg_match ,则必须使用定界符 。
您示例中的代码说明是否存在^(?:[az]+:)?//
匹配项,例如,它将匹配a://
或http://
,然后将回显错误,因为[az]+
为非常广泛的匹配。
您可以做的是使用负号 (?!
断言直接在右侧的内容不是所列选项之一。
如果该断言通过,则匹配任何char 1+次.+
以防止匹配空字符串。
^(?!(?:javascript|data|chrome|mailto|tel|sms|callto|mms|skype):).+$
例如
$url = $_GET['url'];
if (preg_match('/^(?!(?:javascript|data|chrome|mailto|tel|sms|callto|mms|skype):).+$/', $url)) {
echo $url;
} else {
echo 'error';
}
检查是否以http
开头,如下所示:
$url = $_GET['url'];
if (preg_match('/^http/', $url)) {
echo $url;
} else {
echo 'error';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.