2

我有一个输入场景,其中输入模式如下:

var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+\s*([^,]?[a-z]+)*$/i;

我的输入是以下允许的类型:

  • 加利福尼亚州洛杉矶
  • 加利福尼亚州洛杉矶(字符串文本之间有空格)
  • 美国加利福尼亚州洛杉矶
  • 美国加利福尼亚州洛杉矶(字符串文本之间有空格)
  • 美国加利福尼亚州洛杉矶(字符串文本之间有空格,可能在结尾文本之后)

以下输入类型(带有 extra 的输入类型未通过测试:

  • 美国加利福尼亚州洛杉矶
  • 美国加利福尼亚州洛杉矶(字符串文本之间有空格)
  • 美国加利福尼亚州洛杉矶(字符串文本之间有空格,可能在结尾文本之后)

谁能告诉我我在这里做错了什么?任何帮助,将不胜感激!谢谢!

是的,我是正则表达式和 js 的新手。

用于测试的完整代码:

if (str.match(locationstring)){             
console.log("Match pattern str!");          
type = 2;       
}else{          
alert("No match str!");             
return;         
}
4

2 回答 2

2
var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+\s*([^,]?[a-z]+)*$/i;
                                              ^^^^

在这里,您明确禁止任何逗号(带有否定字符类)。每个包含多个逗号的字符串都不符合该规则。

看来您实际上希望在该位置允许逗号后跟可选空格:

var location = /^[a-z]+\s*[a-z]*,\s*[a-z]+(,\s*[a-z]+)*$/i;
于 2013-11-13T21:19:21.587 回答
1

您的正则表达式只能匹配一个 , 在一个位置 - 正则表达式中的逗号所在的精确基。所以很明显它不会匹配包含多个的字符串;)

这个正则表达式将匹配您所有的测试用例(并且,与您的不同,匹配名称中没有空格的城市 - 那些存在,你知道吗?^^):

/^\w+(\s*\w+)?\s*,\s*\w+\s*(,\s*\w+)?$/i?

(它仍然不匹配包含 whistespace 的国家或州 - 如果应该,请告诉我。

于 2013-11-13T21:19:12.817 回答