正则表达式语法困难

Regular expression syntax difficulties

本文关键字:语法 正则表达式      更新时间:2023-09-26

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

    数字
  1. 非字母字符(如!、@、%等符号)
  2. 空格不能超过1个("Sarah Jane"可以,"Sarah Jane"不行)

这是我的函数到目前为止,做任何明显的语法错误,特别是在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>

这是你所要求的正则表达式:

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

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

解释:

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

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

根据你的描述,这个正则表达式将更适合你:

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";
}