2010-08-23 110 views
5

我有一个输入文本字段,需要限制哪些字符可以输入。作为一种防止错误输入的防御形式,我试图不让用户输入不正确的东西。输入可以是[a-zA-Z -._]个字符,限制为32个字符。防止特殊字符输入到HTML文本字段

<input id="aliasEntry" type="text" maxlength="32"> 

正如你所看到的,我已经有32个字符限制想通了,并从输入任何更多的已达到极限后阻止用户。但是我在防止输入不正确的字符时遇到了问题。

我使用jQuery的.keypress()和.keydown()事件捕做的事情类似于以下尝试:

$("#aliasEntry").keypress(function(e) 
{ 
    var code = e.which || e.keyCode; 
    // 65 - 90 for A-Z and 97 - 122 for a-z 95 for _ 45 for - 46 for . 
    if (!((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code == 95 || code == 46 || code == 45)) 
    { 
     var text = $("#aliasEntry").val(); 
     text = text.substring(0,text.length); 
     $("#aliasEntry").val(text); 
    } 
}); 

但这样做的问题是,浏览器总是插入键入的字符进入事件处理后的文本框中,这使得代码无用,因为我试图消除的字符尚未输入。有没有一种方法可以防止浏览器在用户输入字符后将字符插入文本框?

+2

使用jQuery时,您不必再次对['e.which'](http://api.jquery.com/event.which/)进行标准化。 – 2010-08-23 23:06:56

+0

请记住,最好有一些用户界面解释为什么用户的键盘突然停止工作。 – derobert 2010-12-21 19:38:44

+2

还记得做服务器端验证。客户端验证非常容易欺骗(在这种情况下,在我的浏览器上关闭JavaScript) – 2010-08-23 23:02:39

回答

5

您正在使用jQuery,因此请参阅:http://api.jquery.com/event.preventDefault/。 如果该字符恰好无效,请致电e.preventDefault(),这样可以防止发生默认的浏览器操作,在这种情况下,将会插入一个字符。

+0

并在'keypress'期间执行此操作;在Opera中,您无法阻止'keydown'期间的默认操作。 – 2010-08-23 23:06:20

+0

是的,效果很好。我也在朝着这个方向看,以弄清楚事件是否可以简单地停止,但我搞错了方法。谢谢! – JDC 2010-08-23 23:12:08

0

用你的输入这样

<input maxlength="32" onKeyUp="chText()" onKeyDown="chText()" id="aliasEntry"/> 

,并在它 的javascript写chText()功能如下

function chText() 
{ 
    var str=document.getElementById("aliasEntry"); 
    var regex=/[^a-z]/gi; 
    str.value=str.value.replace(regex ,""); 
} 

这段代码它不会允许任何字符,除了a-zA-Z

进入