如何使用Javascript检测外部URL

时间:2011-08-19 17:35:22

标签: javascript external-url

我的目标很简单,我很惊讶我在其他帖子中找不到答案,如果我错过了,我会提前道歉....

我有一个textarea输入。我想确保用户不发布指向外部网站的链接。

我更喜欢这样做客户端,如果存在外部链接,则只是阻止提交。

我已经看过很多关于如何找到网址并将它们变成href的帖子。我想我可以使用相同的逻辑来简单地删除它们,但这不会阻止用户继续进行,我想要做的是专门阻止他们提交外部链接是否存在。

我还需要允许同一域内的链接,因此必须比较检测到的链接的实际URL。我已经看到了这样做的方法,一旦我自己有一个字符串中的url,但是现在,它正处于文本副本的中间。

2 个答案:

答案 0 :(得分:1)

不要只做这个客户端。你也必须检查服务器端。客户端检查仅用于改善用户体验。任何业务逻辑必须在服务器端处理。

以post或get来做这件事是微不足道的:

http://url.com?textareainput=http://urltoverybadsite

您可以通过快速正则表达式为用户创造更好的效果:

<script>
function checkLinks()
{
   var links = document.getElementById('textareainput').value.match("/http:\/\//")
   if (!links)
   {
       window.alert("Links not allowed!")
       return false;

   }
   return true;
}
</script>

<form onsubmit="checkLinks()"><textarea id='textareainput'></textarea></form>

答案 1 :(得分:0)

<script type="text/javascript">
function validate() {
    var noExternalURLs = true;
    var currentDomain = window.location.protocol + '//' + window.location.host;
    var links = new Array();
    var re = new RegExp('^'+currentDomain,"gi");

    // Get protocol & domain of URLs in text
    links = document.getElementById('mytextbox').value.match(/(https?:\/\/[\w\d.-]+)/gi);

    // Loop over links. If protocol & domain in URL doesn't match current protocol & domain then flag
    for(var i=0; i<links.length; i++)
    {
        if( links[i].match(re) == null )
        {
            noExternalURLs = false;
        }
    }

    return noExternalURLs;  // prevent submit if noExternalURLs==false
}
</script>

<form id="myform" action="index.php" onsubmit="return validate();">
    <textarea id="mytextbox"></textarea>
    <input type="submit" />
</form>