2013-03-06 154 views
3

这里是一个小提琴开始 - http://jsfiddle.net/zuVpx/1/JavaScript的正则表达式来禁止所有特殊字符

Javascript代码:

<script> 
    function validate(e) { 
     var regex = new RegExp("[a-zA-Z0-9]"); 
     var key = e.keyCode || e.which; 
     key = String.fromCharCode(key); 

     if(!regex.test(key)) { 
      e.returnValue = false; 
      if(e.preventDefault) { 
       e.preventDefault(); 
      } 
     } 
    } 
</script> 

HTML代码:

<input type="text" onkeypress="validate(event)" /> 

我只想要个字符和数字。像退格键,删除,大写锁和箭头键等键应该工作。

在此先感谢。

+0

看看这个http://stackoverflow.com/questions/995183/how-to-allow-only-numeric-0-9-in-html-inputbox-using-jquery – Kotzilla 2013-03-06 09:36:01

回答

5

添加id到输入(例如, '验证'),并使用:

document.querySelector('#validate').onkeypress = validate; 

function validate(e) { 
     e = e || event; 
     return /[a-z0-9]/i.test(
        String.fromCharCode(e.charCode || e.keyCode) 
       ) || !e.charCode && e.keyCode < 48; 
} 

JSFiddle

+0

它不适用于Mozilla 。 – Ashwin 2013-03-06 11:24:26

+0

真的吗?它必须是Mozilla的旧版本。这里使用Firefox 19.0,即使在IE8中也是如此。尝试使用'document.getElementById('validate')'而不是'document.querySelector',或者更新浏览器。 – KooiInc 2013-03-06 12:54:16

+0

我发现了这个问题。问题是keyCode - 对于例如#和'end'的密钥(home,end等)重复35到40个密码(至少在这里是我的Mozilla 16;)。 – Ashwin 2013-03-07 07:18:18

1

如何使用附加的if子句?喜欢的东西...

key.charCodeAt(0) > 32 

所以......

function validate(e) { 
    var regex = new RegExp("[a-zA-Z0-9]"); 
    var key = e.keyCode || e.which; 
    key = String.fromCharCode(key); 

    if(!regex.test(key) && key.charCodeAt(0) > 32) { 
     e.returnValue = false; 
     if(e.preventDefault) { 
      e.preventDefault(); 
     } 
    } 
} 
0

为了克服这个问题,例如左箭头键产生与相同的key值键,你可以使用

function validate(e) { 
    e = e || window.event; 
    var bad = /[^\sa-z\d]/i, 
     key = String.fromCharCode(e.keyCode || e.which); 

    if (e.which !== 0 && e.charCode !== 0 && bad.test(key)) { 
     e.returnValue = false; 
     if (e.preventDefault) { 
      e.preventDefault(); 
     } 
    } 
} 

所有可打印字符应该产生一个非零e.whiche.charCode值。
JavaScript Madness: Keyboard Events

jsFiddle

上面假定空格是有效的 - 如果没有,只需从否定字符类中移除\s

2

尝试

/[-!$%^&*()_+|~=`\\#{}\[\]:";'<>?,.\/]/.test(your_variable) 

如果有匹配,则返回true。

相关问题