Как обнаружить внешние URL-адреса с помощью Javascript - PullRequest
0 голосов
/ 19 августа 2011

Моя цель проста, я немного удивлен, что не могу найти ответ на этот вопрос в других постах, заранее извиняюсь, если пропустил ...

У меня есть текстовое поле ввода. Я хочу убедиться, что пользователи не публикуют ссылки на внешние сайты.

Я предпочитаю делать это на стороне клиента и просто запретить отправку при наличии внешней ссылки.

Я видел множество постов о том, как найти URL-адреса и превратить их в ссылки. Я полагаю, что я могу использовать ту же логику, чтобы просто удалить их, но это не помешает пользователям продолжить, что я хочу сделать, это специально остановить их для отправки, если внешние ссылки присутствуют.

Мне также нужно разрешить ссылки в одном домене, поэтому необходимо сравнивать фактические URL обнаруженных ссылок. Я видел способы сделать это, когда у меня есть URL в строке, но сейчас он где-то посередине парапрафа текста.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Не делайте это только на стороне клиента.Вы также должны проверить серверную часть.Проверки на стороне клиента предназначены только для улучшения взаимодействия с пользователем.Любая бизнес-логика ДОЛЖНА обрабатываться на стороне сервера.

Тривиально сделать это как сообщение или получить:

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>
0 голосов
/ 19 августа 2011
<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>
...