繁体   English   中英

如何检查网址是否为tel:或javascript:

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM