我需要验证一个字符串,该字符串可以包含任意数量的字符,逗号,然后是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。
我错过了什么?
答案 0 :(得分:2)
{2,}
至少为2,{2}
正好是2,所以我不确定为什么逗号后面的三个字符仍然返回true。
这是对的。你忘了的是anchor你的表达式将字符串开始和结束 - 否则当出现在字符串中时它返回true。
不包括任何空格:我尝试在逗号
之后添加\ S指示符
这恰恰相反。 \s
匹配空白字符,\S
匹配所有非空白字符。此外,您可能需要一些optional repetition的空格,而不是要求一个空格。
[A-z]
请注意,此字符范围还包括Z
和a
之间的字符,即[]^_`
。您可能需要使用[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到多个空格..