【问题标题】:JavaScript - Prevent users from copy pasting a special character in input text?JavaScript - 防止用户在输入文本中复制粘贴特殊字符?
【发布时间】:2019-07-09 06:24:06
【问题描述】:

javascript 中,我如何检查用户是否在text 中有'=',他们正在粘贴并防止text 被粘贴在textbox 中。我发现它有点棘手。我正在研究一个漏洞问题,即不允许用户在input 字段中输入=,我在某种程度上实现了用户无法在文本字段中输入但可以复制粘贴的问题,这是一个问题。下面是我的代码。请帮忙。

$(document).ready(function() 
{
    inPutCheckForText();
 });

function inPutCheckForText()
{
    fields = document.getElementsByTagName('input');
    for (index = 0; index < fields.length; ++index) 
    {
        fields[index].addEventListener("keydown", function(event) 
        {
            if (event.keyCode === 187) 
            {
                console.log("blocked.");
              event.preventDefault();
              return false;
            }
        });
    }
}

【问题讨论】:

  • 而不是keydown change 事件。在回调中查看您的值中是否有 =,如果您删除它
  • 要从粘贴的文本中删除特定字符,您可以为粘贴事件设置一个处理程序(请参阅:developer.mozilla.org/en-US/docs/Web/API/Element/paste_event),但这不会修复您的漏洞!脚本仍然可以插入这些字符。使用时需要验证输入数据。永远不要相信来自未知来源的任何数据。

标签: javascript jquery regex events input


【解决方案1】:

我是这样做的:

<input type="text" onpaste="validatePaste(this, event)"> 

                        

,我调用位于&lt;script&gt; 标签内的函数,例如:

function validatePaste(el, e) {
  var regex = /^[a-z .'-]+$/gi;
  var key = e.clipboardData.getData('text')
  if (!regex.test(key)) {
    e.preventDefault();
    return false;
  }
}

【讨论】:

    【解决方案2】:

    这仅适用于过去的活动,您可以为其他活动更改它。它将限制用户在输入字段中使用 Past '='

    $(function(){
            $("#textInput").bind('paste', function(e) {
            var ctl = $(this);
            setTimeout(function() {
                //Do whatever you want to $(ctl) here....
                var bla = $('#textInput').val();
                if (bla.indexOf('=') > -1){
                   alert("= not allowed");
                    $( '#textInput' ).val(null) ;
                    e.preventDefault();
                    return false;
                }
            }, 100);
            });
    
    
        });
    

    【讨论】:

      【解决方案3】:

      除了“keydown”事件。您应该使用“粘贴”事件来处理复制粘贴

      $('#textbox').on("paste", function(e) {
        if (event.keyCode === 187) 
        {
          console.log("blocked.");
          event.preventDefault();
          return false;
        }
      });
      

      或尝试使用

      $ ('#textbox').bind("paste", function (e) {
        if (event.keyCode === 187) 
        {
          console.log("blocked.");
          event.preventDefault();
          return false;
        }
      });
      

      【讨论】:

      • 为什么要两个事件,什么时候我们可以使用change 事件来处理这两个场景
      • preventDefault() 在“更改”事件中未按预期工作。使用“更改”时,只有在将文本粘贴到文本框后才会触发该事件。但要求是限制特殊字符的粘贴。所以我建议使用“粘贴”事件。
      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多