2014-04-19 146 views
0

我想创建一个注册表单。当然,每个用户都必须选择一个用户名和一个密码,但我想,用户名中只有小字母和数字0-9。 我想使用正则表达式和JavaScript。这里是代码:javascript正则表达式不起作用

<!DOCTYPE HTML> 
<html lang="en-US"> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
    <script type="text/javascript"> 
    function check(value) { 
     valid_qwe = /[a-z0-9\-]$/; 
     trying = valid_qwe.test(value); 
     alert("The name: " + value + "\nBe allowed: " + trying); 
     return valid_qwe; 
    } 
    </script> 
</head> 
<body> 
    <input type="text" autofocus id="qwe" name="qwe" value="" /> 
    <input type="submit" onClick="check(document.getElementById('qwe').value);" value="Check" id="check" /> 
</body> 
</html> 

但是,当我试图测试如:苹果或#苹果总是写“真”。

我该怎么办?

谢谢!

+0

我想你不想'\ - '号之后,但只有'/ [A-Z0-9] $ /;' –

+3

限制可用于字母表用户名和密码是安全失败。 – Pointy

回答

1

您的Regexp会测试最后一个字符是否在这些限制内,请尝试使用/^[a-z0-9\-]+$/

1

应该是:

var valid_qwe = /^[a-z0-9-]+$/; 

三个转变这里:

  • 图案本身现在one or more characters of the given range(注意:+量词括号后);

  • 它固定在字符串的末尾(使用$)和开头(使用^);

  • 如果它是最后一个或第一个符号,则不需要在字符范围内转义-

最后,我宁愿看到你的本地化函数中使用的所有变量 - 因此var

0

你的正则表达式是正确的(除了你正在检查最后一个字符),但你没有匹配完整的字符串。

+添加到您的正则表达式,这意味着匹配一个或多个以前的标记。

所以,你的正则表达式应该是:

var valid_qwe = /[a-z0-9\-]+/