【问题标题】:Do not allow to write special character不允许写特殊字符
【发布时间】:2018-07-27 20:15:01
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

标签: javascript jquery


【解决方案1】:

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

您在正确的轨道上根据键码过滤掉不需要的字符。虽然不是最理想的方式,但它会完成这项工作。

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

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

只需在您的 $(document).ready 函数中添加以上内容

【讨论】:

  • 或者使用onPaste和onCopy属性并返回false
  • @kmukkamala 问题不仅是禁用复制粘贴部分,我还询问如何禁用写入特殊字符。
  • @Azzo 为了防止特殊字符,您可以简单地使用事件上的 which 属性来确定按下了哪个键,然后将它们过滤掉,类似于使用 keyCode 进行操作的方式现在。
【解决方案2】:

对特殊字符使用字母数字插件。这是一个你想要的工作示例:demo

字母数字插件:jquery.alphanum

$("#hash").alphanum({ 
    allow : '#',
    disallow           : '!@$%^&*()+=[]\\\';,/{}|":<>?~`.- _',
    allowSpace         : true
});

使用 jQuery 禁用粘贴 (Ctrl+V)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2010-12-10
    相关资源
    最近更新 更多