5

如何禁用粘贴到文本框中的特殊字符?

我正在使用 onkeypress 事件处理程序

function disableOtherChar(evt) {
    var charCode;
    charCode = (evt.which) ? evt.which : evt.keyCode;
    var ctrl;
    ctrl = (document.all) ? event.ctrlKey : evt.modifiers & Event.CONTROL_MASK;
    if ((charCode > 47 && charCode < 58) || (charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || charCode == 8 || charCode == 9 || charCode == 45 || (ctrl && charCode == 86) || ctrl && charCode == 67) {
        return true;
    } else {
        $(":text").live("cut copy paste", function (e) {
            e.preventDefault();
        });
        return false;
    }
}

但是粘贴的时候不屏蔽特殊字符,只在输入的时候,

4

4 回答 4

13

假设你有一个输入

 <input id="textInput" name="textInput">

并且您有以下脚本来验证副本:

$(function(){

   $( "#textInput" ).bind( 'paste',function()
   {
       setTimeout(function()
       { 
          //get the value of the input text
          var data= $( '#textInput' ).val() ;
          //replace the special characters to '' 
          var dataFull = data.replace(/[^\w\s]/gi, '');
          //set the new value of the input text without special characters
          $( '#textInput' ).val(dataFull);
       });

    });
});
于 2013-05-28T03:28:00.123 回答
0

不是答案,只是关于以下内容的评论:

var ctrl;
ctrl = (document.all) ? event.ctrlKey:evt.modifiers & Event.CONTROL_MASK;

请学习使用特征检测,基于对象推断的行为推断至少在某些时候注定会失败。

另外,不要使用键码,测试实际字符。例如,如果您只想允许字母、数字和其他几个:

function hasInvalidChars(s) {

  // allow letters, spaces, numbers only
  var validChars = /[\w\s\d]/gi;
  var x = s.replace(validChars, '');
  return !!x.length;
}

alert(hasInvalidChars('asdf1234 1234asd'));  // false
alert(hasInvalidChars('asdf1.234 1234asd')); // true

将有效字符集扩展为您想要的任何字符。

哦,如果你想把它当作一个单线:

function hasInvalidChars(s) {
  return !!s.replace(/[\w\s\d]/gi, '').length;
}
于 2013-05-28T02:59:00.350 回答
0

您可以使用像jquery.alphanum这样的 3rd 方插件,它也适用于粘贴 (ctrl+v)。代码如下所示:

$("input").alphanum();

或者您可以像这样以更规范的方式使用它:

$("#elemet").alphanum({
    允许:“asd”,
    不允许 : ”!@#”,
    允许上:假
});

您需要将上面的代码添加到您的 JQuery 声明中。

我提到你也可以从第 124 行的脚本中修改黑名单数组jquery.alphanum.js。你会发现一个函数名称getBlacklistAscii,你var blacklist = ...可以根据自己的需要进行修改。

于 2016-04-18T00:57:05.407 回答
0

我对 Christian 提供的脚本做了一些改动。

此版本将不在空格(ASCII DEC 32)之间的所有内容替换为波浪号(ASCII DEC 126)和空白字符。这意味着应删除所有不可见的字符。

如果您在 Jquery 环境中添加类api_clean_characters这应该可以开箱即用。

<textarea class="api_clean_characters"></textarea>


$(function(){

    $( ".api_clean_characters" ).bind( 'paste',function(ev)
    {
        var $target = $(ev.target);
        setTimeout(function()
        {
            //get the value of the input text
            var data= $target.val() ;
            //replace the special characters to ''
            var dataFull = data.replace(/[^ -~\s]/gi, '');
            //set the new value of the input text without special characters
            $target.val(dataFull);
        });

    });
});
于 2018-03-22T22:44:08.757 回答