不允许粘贴任何非字母数字字符

时间:2010-07-22 18:07:05

标签: javascript validation

我不希望用户允许在文本框中粘贴任何非字母数字字符。 如何在Javascript中限制此操作? 谢谢!

6 个答案:

答案 0 :(得分:7)

使用jQuery,这是一种方法:

HTML:

​<form name='theform' id='theform' action=''>
<textarea id='nonumbers' cols='60' rows='10'> </textarea>
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

JavaScript的:

$().ready(function(){
    $("textarea#nonumbers").keyup(removeextra).blur(removeextra);
});
function removeextra() {
    var initVal = $(this).val();
    outputVal = initVal.replace(/[^0-9a-zA-Z]/g,"");       
    if (initVal != outputVal) {
        $(this).val(outputVal);
    }
};

Try it out here.

编辑:正如评论中所说,原始(使用.keyup()事件)将通过鼠标上下文菜单打开粘贴的可能性,所以我添加了一个.blur()事件。 .change()本来也是可能的,但有报道称有懈怠。另一种选择是使用.focusout()。是时候试验......

答案 1 :(得分:2)

您可以使用文本框的onblur事件。

function remove()
{
  var otxt=document.getElementById('txt1'); 

var val=otxt.value;

 for(i=0;i<val.length;i++)
   {
     var code=val.charCodeAt(i);
     if(!(code>=65 && code<=91) && !(code >=97 && code<=121) && !(code>=48 && code<=57))
         { otxt.value=""; return ; }    

   }
}


<input type="text" id="txt1" onblur="remove();" />

输入非字母数字值时,它将删除文本框的所有值。

答案 2 :(得分:1)

为什么没有人建议使用OnPaste事件?这在IE,Safari和Chrome中完全支持。

Docs for using OnPaste in IE

Docs for using OnPaste in Webkit

在JQuery中,它看起来像这样:

$(input).bind("paste", function(e){ RemoveNonAlphaNumeric(); })

占据了浏览器市场的75%。

如果您使用JQuery,OnPaste会在Firefox中自动标准化,以便它也能在那里运行。如果你不能使用JQuery,那么有一个OnInput事件可以运行。

工作解决方案是使用快速setTimeout值来允许填充输入的value属性。

基本上是这样的:

$("input").bind("paste", function(e){RemoveAlphaChars(this, e);});

function RemoveAlphaChars(txt, e)
{
    setTimeout(function()
    {
        var initVal = $(txt).val();

        outputVal = initVal.replace(/[^0-9]/g,"");

        if (initVal != outputVal)
            $(txt).val(outputVal);
    },1);
}

我已经在IE,Chrome和Firefox中对此进行了测试,效果很好。超时速度非常快,您甚至无法看到正在删除的字符。

答案 3 :(得分:0)

我不确定如何阻止粘贴,但您可以在提交或更改事件中过滤内容。

答案 4 :(得分:0)

最好验证表单 - 检查这个优秀的jQuery插件 - http://docs.jquery.com/Plugins/Validation/,然后您可以使用“数字”规则:http://docs.jquery.com/Plugins/Validation/Methods/number。真的很简单,很容易调整!

答案 5 :(得分:0)

假设:

<textarea id="t1"/>

你可以修改textarea的onchange事件处理程序,去掉任何不是字母数字的东西:

document.getElementById('t1').onchange = function () {
    this.value = this.value.replace(/\W/,'');
}