我需要验证一个可以包含任意数量的字符、一个逗号,然后是 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 个以上字符,逗号后有两个字符,我希望它返回 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,}
is at least 2, and{2}
is exactly two, so I'm not sure why three characters after the comma are still returning true.
这是正确的。你忘记的是anchor字符串开始和结束的表达式 - 否则,当它出现在字符串中的某个位置时,它返回 true。
not including any whitespace: I've tried adding the \S indicator after the comma
事实恰恰相反。 \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;
关于javascript - RegExp 问题 - 字符限制和空白忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751150/