0

私の目的は単純です、私は他の投稿でこれに対する答えを見つけることができないことにちょっと驚いています、私がそれを逃したならば私は前もって謝罪します....

textarea入力があります。ユーザーが外部サイトへのリンクを投稿しないようにしたい。

私はこのクライアント側を実行し、外部リンクが存在する場合は単に送信を防ぐことを好みます。

URLを見つけてhrefにする方法についての投稿をたくさん見てきました。同じロジックを使用して単純に削除できると思いますが、それでもユーザーの続行が妨げられることはありません。外部リンクが存在する場合は、送信を停止するだけです。

また、同じドメイン内のリンクを許可する必要があるため、検出されたリンクの実際のURLも比較する必要があります。自分でURLを文字列に入れたら、これを行う方法を見てきましたが、現在は、テキストのパラグラフの途中にあります。

4

2 に答える 2

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 に答える
1

Do not do this client side only. You must check server side too. Client side checks are only for improving the user experience. Any business logic MUST be handled on he server side.

It is trivial to do this as post or get:

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

You can make it nicer for your users by doing a quick regex:

<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 に答える