0

我需要验证一个字符串,该字符串可以包含任意数量的字符、一个逗号,然后是 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。

我还需要能够忽略逗号和其余两个字符之间可能存在的空格。(换句话说,如果逗号之前有 2+ 个字符,逗号之后有 2 个字符,我希望它返回 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。

我错过了什么?

4

2 回答 2

2

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

这是正确的。您忘记了将表达式锚定到字符串开始和结束 - 否则当它出现在字符串中的某个位置时它返回 true。

不包括任何空格:我尝试在逗号后添加 \S 指示符

那是完全相反的。\s匹配空白字符,\S匹配所有非空白字符。此外,您可能想要一些可选的空格重复,而不是要求精确的一个。

[A-z]

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

结合起来,这就是您的正则表达式应该看起来的样子(使用正则表达式文字而不是RegExp带有字符串文字的构造函数):

var patt1 = /^[a-z]{2,},\s*[a-z]{2}$/i;
于 2013-07-19T16:38:56.767 回答
1

你错过了^, .Also范围不$应该是[a-zA-Z][A-z]

你的正则表达式应该是

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

^将从一开始就匹配字符串...

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

没有$^它将匹配字符串之间的任何位置

\s*将匹配 0 到多个空间..

于 2013-07-19T16:36:08.130 回答