正则表达式语法困难

时间:2014-07-24 21:10:04

标签: javascript regex

我正在尝试用JavaScript学习正则表达式测试,但我发现很难想象。在下面的示例中,我尝试测试用户输入的名字,以确保它没有:

  1. 数字
  2. 非字母字符(例如!,@,%等符号)
  3. 不超过1个空格('Sarah Jane'没问题,但'Sarah Jane'不是)
  4. 这是我的功能到目前为止,做任何明显的语法错误,特别是在reg表达式中脱颖而出?感谢。

    <script language="javascript" type="text/javascript">
            function nameValidate() {
                var input = document.forms['myForm']['fName'].value;
                var re = /\d\s{2,}\W/;
                if (input == "") {             // Make sure there is something filled out
                    document.getElementById('fNameError').style.color = "red";
                    document.getElementById('fNameError').innerHTML = "** You must enter a name";
                }
                else if (re.test(input)) {
                    document.getElementById('fNameError').style.color = "red";
                    document.getElementById('fNameError').innerHTML = "** Names must contain only letters a-z or A-Z and no more than one space between names";
                }
            }   
        </script>
    

2 个答案:

答案 0 :(得分:2)

这是你要问的正则表达式:

var re = /^[a-zA-Z]+(?: [a-zA-Z]+)?$/;

如果匹配,则表示输入有效。

说明:

  • ^ ... $锚定正则表达式,因此它必须匹配整个字符串,而不仅仅是其中的任何子字符串
  • [a-zA-Z]+匹配一个或多个连续字母
  • (?: ... )只是一个分组表达式
  • ...包含空格和另一个[a-zA-Z]+
  • ...并且由于?
  • 而可选

如果您愿意,也可以应用变体,例如[A-Z][a-z]*而不是每个[a-zA-Z]+将确保每个名称以大写字母开头,并且在第一个字母后面只包含小写字母。

答案 1 :(得分:1)

根据您的描述,此正则表达式将更适合您:

var re = /^[a-z]+( [a-z]+)?$/i;

然后将re.test反转为:

else if (!re.test(input)) {
  document.getElementById('fNameError').style.color = "red";
  document.getElementById('fNameError').innerHTML = "** Names must contain only letters a-z or A-Z and no more than one space between names";
}