我的目标很简单,我很惊讶我在其他帖子中找不到答案,如果我错过了,我会提前道歉....
我有一个textarea输入。我想确保用户不发布指向外部网站的链接。
我更喜欢这样做客户端,如果存在外部链接,则只是阻止提交。
我已经看过很多关于如何找到网址并将它们变成href的帖子。我想我可以使用相同的逻辑来简单地删除它们,但这不会阻止用户继续进行,我想要做的是专门阻止他们提交外部链接是否存在。
我还需要允许同一域内的链接,因此必须比较检测到的链接的实际URL。我已经看到了这样做的方法,一旦我自己有一个字符串中的url,但是现在,它正处于文本副本的中间。
答案 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>