0

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

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

我更喜欢做这个客户端,如果存在外部链接,就简单地阻止提交。

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

我还需要允许同一域内的链接,因此也必须比较检测到的链接的实际 url。一旦我将url单独放在一个字符串中,我已经看到了执行此操作的方法,但是现在,它位于文本段落的中间。

4

2 回答 2

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>
于 2011-08-19T17:41:29.153 回答
1
<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>
于 2011-08-19T18:27:17.190 回答