Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegExp问题-字符限制和空白忽略_Javascript_Regex - Fatal编程技术网

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;