javascript - 不允许写入特殊字符

标签 javascript jquery

我正在尝试使用 jquery 制作主题标签系统,但我对特殊字符 ctrl+V 有疑问。和mause right click paste 。我不想允许 ctrl+v右键单击粘贴,而且我也不想允许特殊字符,例如(*/-+()[]{}?-_^|!'"<>&%,.:;`)。

我们可以在我的代码中做到这一点吗?任何人都可以在这里帮助我吗?

这是DEMO 页面

在这个演示中,您可以看到,当您编写示例时,jquery 代码会如何自动在世界前面添加 diez( # ) 符号,如下所示 #how #are #you

这是快速代码:

$(document).ready(function() {
  $("body").on("keyup", "#hash", function(event) {
    var keyCode = event.keyCode;
    // Allow: backspace, delete, tab, escape et enter
    if (
      $.inArray(keyCode, [46, 8, 27]) !== -1 ||
      // Allow: Ctrl+A, Command+A
      (keyCode == 65 && (event.ctrlKey === true || event.metaKey === true)) ||
      // Allow: Ctrl+Z, Command+Z
      (keyCode == 90 && (event.ctrlKey === true || event.metaKey === true)) ||
      // Allow: home, end, left, right, down, up
      (keyCode >= 35 && keyCode <= 40)
    ) {
      // let it happen, don't do anything
      return;
    }

    if ($.inArray(keyCode, [32, 9, 13]) !== -1) {
      var $textarea = $(this);
      var text = $textarea.val();
      text = XRegExp.replaceEach(text, [
        [/#\s*/g, ""],
        [/\s{2,}/g, " "],
        [
          XRegExp(
            "(?:\\s|^)([\\p{L}\\p{N}]+)(?=\\s|$)(?=.*\\s\\1(?=\\s|$))",
            "gi"
          ),
          ""
        ],
        [XRegExp("([\\p{N}\\p{L}]+)", "g"), "#$1"]
      ]);

      $textarea.val(text);
      event.preventDefault();
      event.stopPropagation();
      event.stopImmediatePropagation();
    }
  });
});
.hash {
  position:relative;
  width:100%;
  border:1px solid #d8dbdf;
  outline:none;
  padding:15px;
  color:#292929;
}
.hash:focus {
  border:1px solid red;
}
.container {
  position:relative;
  width:100%;
  max-width:600px;
  margin:0px auto;
  margin-top:100px;
}
<script src="https://unpkg.com/xregexp@3.2.0/xregexp-all.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <input type="text" class="hash" id="hash" placeholder="Write your word and press enter"/>
</div>

最佳答案

您需要的是防止用户执行此类操作时发生默认事件。因此,最简单的方法可能是捕获事件并阻止它们。

根据键码过滤掉不需要的字符,您的做法是正确的。虽然不是最理想的方法,但它可以完成工作。

  $('#hash').on("paste",function(e) {
      e.preventDefault();
  });

  $('#hash').bind("contextmenu", function(e) { 
      e.preventDefault(); 
  });

只需将上述内容添加到您的 $(document).ready 函数中

关于javascript - 不允许写入特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51564965/

相关文章:

javascript - 在不知道 javascript 中的标识符的情况下解析 json

javascript - 如果不存在,如何在javascript中修改URL?

jquery - Owl Carousel : jump to a slide with an certain id

javascript - 满足所有要求后显示警报

javascript - 如何发送 MySQL 参数

javascript - Node JS 安全摄像头运动检测

javascript - HOC 和 ReactJS 中提升状态有什么区别?

jquery - 如何将jquery日期选择器限制为仅当前月份?

javascript - 显示加载.. 在 bootstrap 4 中使用 jquery 和数据加载文本

javascript - 在悬停系列名称 Highcharts 上添加消息