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

时间:2013-05-28 01:53:59

标签: javascript jquery html

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

我正在使用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 个答案:

答案 0 :(得分:10)

假设您有一个输入

 <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);
       });

    });
});

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

$("input").alphanum();

或者你可以用更加灵活的方式使用它:

$("#elemet").alphanum({
    allow      : "asd",
    disallow   : "!@#",
    allowUpper : false
});

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

我提到您还可以在第124行的脚本jquery.alphanum.js中修改黑名单数组。您将找到一个函数名称​​ getBlacklistAscii ,in您将var blacklist = ...修改为适合您的内容。

答案 3 :(得分:0)

我改变了Christian提供的脚本。

此版本将 spaces (ASCII DEC 32)之间的所有内容替换为 tilde (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);
        });

    });
});