如何只允许使用JavaScript的字母数字字符

时间:2011-06-06 17:50:04

标签: javascript

一直在使用JavaScript,我想要做的只是允许传递字段中的某些字符 - a-z,A-Z和0-9。

<form action="http://www.cknuckles.com/cgi/echo.cgi" method="get" name="logOn">
  User Name:<br />
  <input type="text" name="userName" size="25" /><br />
  Password:<br />
  <input type="password" name="pw" size="25" /><br />
  <input type="submit" value="Log In" onClick="validate()"/> 
</form>

上面是我的HTML,下面是我尝试用来验证它的JavaScript - 但它不起作用 - 任何线索。

<script language="javascript">
   document.logOn.onsubmit=validate;

   function validate(){

var name=document.logOn.pw.value;
    if(!name = "[a-zA-Z0-9]"){              
alert("Your Password Cant Have Any Funky Things In It - Play It Straight!");
    return false;
}               

    return true;
}
</script>

但这不起作用。我仍然可以把字符放在“*”和“[”和“{”等

有什么想法吗?

3 个答案:

答案 0 :(得分:25)

你需要让你的条件测试regexp,而不是字符串:

if(!/^[a-zA-Z0-9]+$/.test(name)){ ...

含义:

  • ^ - 行首
  • [a-zA-Z0-9]+ - 一个或多个字符/数字
  • $ - 行尾

或者您可以搜索其中的反转,即“任何未接受的字符”:

if(/[^a-zA-Z0-9]/.test(name)){

答案 1 :(得分:4)

if (name.match(/[\W_]/)) { //...

如果“name”字符串具有任何非字母数字或下划线的字符,则执行该块。请注意,我们必须单独检查下划线(_),因为字母数字字符类(\w)包含下划线(因此否定类(\W)。

答案 2 :(得分:0)

以下解决方案将仅接受字母数字值和一些 特殊键,例如退格键删除等。

如果要添加其他键,则将其添加到数组。

如果要添加一些特殊符号,请添加到同一数组中或创建一个新数组,然后将其与诸如ex:yourNewVariableName.indexOf(e.keyCode)

这样的函数进行比较

var specialKeys = [8, 9, 46, 36, 35, 37, 39];
        function IsAlphaNumeric(e) {
            var keyCode = e.keyCode == 0 ? e.charCode : e.keyCode;
            var ret = ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90) || (keyCode >= 97 && keyCode <= 122) || (specialKeys.indexOf(e.keyCode) != -1 && e.charCode != e.keyCode));
            return ret;
        }
Alphanumeric value:
<input type="text" onkeypress="return IsAlphaNumeric(event);" ondrop="return false;" onpaste="return false;" />