RegExp问题 - 字符限制和空格忽略

时间:2013-07-19 16:33:03

标签: javascript regex

我需要验证一个字符串,该字符串可以包含任意数量的字符,逗号,然后是2个字符。我有一些问题。这就是我所拥有的:

var str="ab,cdf"; 
var patt1=new RegExp("[A-z]{2,}[,][A-z]{2}");
if(patt1.test(str)) {
    alert("true");
}
else {
    alert("false");
}

我希望这会返回false,因为我对逗号后面的字符有{2}限制,而且这个字符串有三个字符。但是,当我运行fiddle时,它返回true。我对RegExp的理解(肯定是有限的)表明{2,}至少为2,{2}正好是2,所以我不确定为什么逗号后面的三个字符仍然返回true。

我还需要能够忽略逗号和剩余两个字符之间可能的空格。 (换句话说,如果它们在逗号之前有两个以上的字符,并且在它之后有两个字符,那么我希望它返回true - 在它不包括用户可能输入的任何空格之后的两个字符。)

所以这些都应该返回true:

var str = "ab, cd";
var str = "abc, cd";
var str = "ab,cd";
var str = "abc,dc";

我尝试在逗号之后添加\S指标:

var patt1=new RegExp("[A-z]{2,}[,]\S[A-z]{2}");

然后字符串一直返回false,即使我将它设置为ab, cd,也应该返回true。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

  

{2,}至少为2,{2}正好是2,所以我不确定为什么逗号后面的三个字符仍然返回true。

这是对的。你忘了的是anchor你的表达式将字符串开始和结束 - 否则当出现在字符串中时它返回true。

  

不包括任何空格:我尝试在逗号

之后添加\ S指示符

这恰恰相反。 \s匹配空白字符,\S匹配所有非空白字符。此外,您可能需要一些optional repetition的空格,而不是要求一个空格。

[A-z]

请注意,此字符范围还包括Za之间的字符,即[]^_`。您可能需要使用[A-Za-z],或使用[a-z]并使您的正则表达式不区分大小写。

组合,这就是你的正则表达式应该是这样的(使用regular expression literal而不是带有字符串文字的RegExp构造函数):

var patt1 = /^[a-z]{2,},\s*[a-z]{2}$/i;

答案 1 :(得分:1)

您遗失了^$。此外,范围应为[a-zA-Z]而不是[A-z]

你的正则表达式应该是

^[a-zA-Z]{2,}[,]\s*[A-Za-z]{2}$

^会从头开始匹配字符串......

$会匹配字符串直到结束。

如果没有$^,它将匹配字符串

之间的任何位置

\s*会匹配0到多个空格..