阻止用户粘贴换行符

时间:2016-08-10 22:07:53

标签: javascript jquery

我目前遇到代码问题。在我的代码中,我有一个textarea,用户可以在其中输入文章的标题,我希望这篇文章只在一行中。这就是我编写脚本以防止用户按下返回键的原因。但是他们可以绕过这种安全性,实际上如果他们复制/超过换行符就可以进入换行符。那么,有没有办法检测换行?我想我们可以用正则表达式和\ n或\ n来做到这一点。但是我尝试了这个:

var enteredText = $('textarea[name="titleIdea"]').val();
var match = /\r|\n/.exec(enteredText);
if (match) {

    alert('working');
}

并且它不会因未知原因而起作用。我认为 var enteredText = $(' textarea [name =" titleIdea"]')。val(); 不起作用,因为我试着警告()它,它什么也没显示。但奇怪的是,当我对$(' textarea [name =" titleIdea"]')进行警报时.val();而不是在enteredText变量上它显示内容。 祝你有美好的一天。 (抱歉错误,我是法国人)

3 个答案:

答案 0 :(得分:1)

  

如果他们复制/超过换行符,他们可以输入换行符

这就是为什么你不应该担心阻止它们进入它 - 只是不要保存它。如果您真的想要,请在blurinput事件中将其删除,但实际上唯一的时间是将其保存到数据库(或您正在使用的任何内容)之前。

$('textarea[name="titleIdea"]').on('blur input', function() {
    $(this).val($(this).val().replace(/(\r\n|\n|\r)/gm,""));
});

并且,正如其他人已经提到的,如果他们不能换行,你就不应该使用textarea。

答案 1 :(得分:0)

我认为你的问题在于粘贴事件。

如果我猜到这是我的片段:

$(function () {
  $('textarea[name="titleIdea"]').on('paste', function(e) {
    var data;
    
    if (window.clipboardData) { // for IE
      data = window.clipboardData.getData('Text');
    } else {
      data = e.originalEvent.clipboardData.getData('Text');
    }
    
    var match = /\r|\n/.exec(data);
    if (match) {

      alert('working');
      console.log(data);
    }
  })
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

<textarea name="titleIdea">

</textarea>

答案 2 :(得分:0)

这需要在后端处理。即使您使用推荐的适当HTML输入类型的文本(而不是textarea),您仍然不会删除保存返回字符的可能性。

另外两个答案使用Javascript - 这在技术上是这个问题的领域。但是,用Javascript无法解决这个问题!这假设输入将始终来自您使用JS函数完美运行时创建的表单。

避免将特定字符插入数据库的唯一方法是在插入数据库之前用后端语言解析和清理数据。

例如,如果您使用的是PHP,那么您可以运行一个类似的正则表达式,在它进入处理之前删除\ n \ r \ nchars。

Javascript仅在这种情况下帮助用户体验(用户看到他们将保存的内容)。但确保数据完整性的唯一方法是在服务器端验证它。