Javascript RegExp问题-字符限制和空白忽略
我需要验证一个字符串,该字符串可以包含任意数量的字符、一个逗号,然后是两个字符。我有一些问题。以下是我所拥有的:Javascript RegExp问题-字符限制和空白忽略,javascript,regex,Javascript,Regex,我需要验证一个字符串,该字符串可以包含任意数量的字符、一个逗号,然后是两个字符。我有一些问题。以下是我所拥有的: 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}限制,并且这个字符串有三个字符。但是,当我运行时,它返回t
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}
限制,并且这个字符串有三个字符。但是,当我运行时,它返回true。我对RegExp的理解(承认是有限的)表明,{2,}
至少是2,{2}
正好是两个,所以我不确定为什么逗号后面的三个字符仍然返回true
我还需要能够忽略逗号和其余两个字符之间可能存在的空白。(换句话说,如果逗号前面有2个以上的字符,后面有两个字符,则我希望返回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
我遗漏了什么?您遗漏了
^
,$
。而且范围应该是[a-zA-Z]
而不是[a-Z]
你的正则表达式应该是
^[a-zA-Z]{2,}[,]\s*[A-Za-z]{2}$
^
将从一开始就匹配字符串
$
将匹配字符串直到结束
如果没有$
,^
它将匹配字符串之间的任何位置
\s*
将0与许多空格匹配。您缺少^
,$
。而且范围应为[a-zA-Z]
而不是[a-Z]
你的正则表达式应该是
^[a-zA-Z]{2,}[,]\s*[A-Za-z]{2}$
^
将从一开始就匹配字符串
$
将匹配字符串直到结束
如果没有$
,^
它将匹配字符串之间的任何位置
\s*
将0与多个空格匹配
{2,}
至少是2,{2}
正好是2,所以我不确定为什么逗号后面的三个字符仍然返回true
没错。您忘记的是将表达式设置为字符串的开始和结束-否则,当它出现在字符串中的某个位置时,它将返回true
不包括任何空格:我已尝试在逗号后添加\S指示符
恰恰相反\s
匹配空白字符,\s
匹配所有非空白字符。另外,您可能需要一些空格,而不是要求精确的空格
请注意,此字符范围还包括Z
和a
之间的字符,即[]^ `
。您可能需要[A-Za-z]
,或者使用[A-z]
并使正则表达式不区分大小写
结合起来,这就是您的正则表达式应该是什么样子(使用一个字符串文本而不是RegExp
构造函数):
{2,}
至少是2,{2}
正好是2,所以我不确定为什么逗号后面的三个字符仍然返回true
没错。您忘记的是将表达式设置为字符串的开始和结束-否则,当它出现在字符串中的某个位置时,它将返回true
不包括任何空格:我已尝试在逗号后添加\S指示符
恰恰相反\s
匹配空白字符,\s
匹配所有非空白字符。另外,您可能需要一些空格,而不是要求精确的空格
请注意,此字符范围还包括Z
和a
之间的字符,即[]^ `
。您可能需要[A-Za-z]
,或者使用[A-z]
并使正则表达式不区分大小写
结合起来,这就是您的正则表达式应该是什么样子(使用一个字符串文本而不是RegExp
构造函数):
事实上,这与我的想法不同。它说的是
{2,}
而不是{2}
。但这不是问题所在;当我修复该问题时,您的小提琴仍会提示true
。您的\S
问题(除了它应该是\S
)是字符串转义。您正在“
引号中加载正则表达式,而不是/
文字语法,因此您需要将引号中的任何`字符转义为\`。尝试一下这一点非常好。@RoryO'Kane-小提琴在第一部分显示{2,}
,应该有2个或更多个字符。第二个显示的是{2}
,我理解这意味着它正好需要2个。@艾美奖确保在单击“更新”保存新版本的同时,单击“基本”将新版本保存为基本版本。基本版本是可在URL上访问的版本,末尾没有版本号,例如/EmmyS/z2fTr/
,而不是/EmmyS/z2fTr/3/
。事实上,这与我的想法不同。它说的是{2,}
而不是{2}
。但这不是问题所在;当我修复该问题时,您的小提琴仍会提示true
。您的\S
问题(除了它应该是\S
)是字符串转义。您正在“
引号中加载正则表达式,而不是/
文字语法,因此您需要将引号中的任何`字符转义为\`。尝试一下这一点非常好。@RoryO'Kane-小提琴在第一部分显示{2,}
,应该有2个或更多个字符。第二个显示的是{2}
,我理解这意味着它正好需要2个。@艾美奖确保在单击“更新”保存新版本的同时,单击“基本”将新版本保存为基本版本。基本版本是可在URL上访问的版本,末尾没有版本号,例如/EmmyS/z2fTr/
instea
var patt1 = /^[a-z]{2,},\s*[a-z]{2}$/i;