2012-03-09 33 views
7

我要强制执行JavaScript的正则表达式(用户名验证)

  1. 输入名字应该只包含字符AZ,az和 -
  2. 输入登录名应该只包含字母数字字符

如何限制JavaScript中的两条规则?

以下是我的用户名正则表达式代码(jsp)。但它不能正常工作。

function validateForm(){ 
    var nameRegex = /^[a-zA-Z\-]+$/; 
    var validfirstUsername = document.frm.firstName.value.match(nameRegex); 
    if(validUsername == null){ 
     alert("Your first name is not valid. Only characters A-Z, a-z and '-' are acceptable."); 
     document.frm.firstName.focus(); 
     return false; 
    } 
} 

谢谢!

+0

* username *和* login *之间的区别是什么?此外,你有什么问题(除了不一致的命名)? – 2012-03-09 04:21:26

+0

@JasonMcCreary一个是名字,另一个是登录名。使用上面的代码,如果我使用horatio2m作为名字输入,用户仍然可以保存,这不是我想要的。我想验证firstname输入应该只包含a-z,A-Z和 - – 2012-03-09 04:26:53

+1

用if(validfirstUsername == null){'替换if(validUsername == null){'。 – 2012-03-09 04:28:41

回答

14

除了不一致的变量参考(请参阅Josh Purvis)之外,您看起来没问题的代码。

下正则表达式是罚款您的名字规格:

var nameRegex = /^[a-zA-Z\-]+$/; 

添加数字为您的用户名检查很简单:

var usernameRegex = /^[a-zA-Z0-9]+$/; 

注:有很多方法来写的正则表达式。我已经选择提供与您开始的版本相匹配的版本。我鼓励你通过这个工作Regular Expression Tutorial

+1

我可以使用/ [a-zA-Z \ - ] /而不是/^[a-zA-Z \ - ] + $ /?为什么我们需要在[a-zA-Z \ - ]之前使用^? – 2012-03-09 04:36:13

+2

^表示匹配字符串中的起始位置 – Neo 2012-03-09 04:44:51

+0

'^'表示字符串的开始。 '$'表示结束。例如,如果你放弃了'^','〜@ * ## @ horatio'会通过你的验证。同样对于'$'和正在检查的字符串的结尾。 – 2012-03-09 04:45:11