2011-06-06 58 views
11

一直在使用JavaScript,我试图做的只是允许某些字符在pass字段中 - a-z,A-Z和0-9。如何只允许使用JavaScript的Alpha数字字符

<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> 

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

任何想法?

回答

25

你需要让你的条件测试一个正则表达式,而不是一个字符串:

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

含义:

  • ^ - 线
  • 开始
  • [a-zA-Z0-9]+ - 一个或多个字符/号码
  • $ - 行尾

,或者你可以搜索的是倒数,这是“任何非接受的字符”:

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

你可以发布一个正在运行的小提琴的例子...我用上面的代码取代了上述代码块,它不工作.. – Lucky 2013-01-02 06:35:12

+0

这个问题是18个月大。如果您遇到问题,请发布新问题。 – 2013-01-03 01:07:34

+0

一个不错的和干净的解决方案,谢谢。 – Sanjeev 2014-07-03 06:37:52

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

意义,如果“名”字符串有这是一个非字母数字的任何字符或下划线然后执行该块。请注意,我们必须单独检查下划线(_),因为字母数字字符类(\w)包含下划线(所以负类(\W)不是而不是)。