如何在文本框中禁用粘贴特殊字符?
我正在使用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;
}
}
但是粘贴时不会阻止特殊字符,仅在输入时
答案 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);
});
});
});