我需要验证表单上的某些字段,在这些字段中我需要检查用户是否在通配符之前或之后输入了至少三个字符 (*
)。
例如:*ABC
或 AB1*
这就是我所拥有的:
var pattern = /^(\*\w{3})|(\w{3}\*)$/;
var matchArray = strInput.match(pattern); // Is this format okay?
if (matchArray == null) {
return false;
}
if (strInput.match(pattern)) {
return true;
}
else {
alert("You must enter at least three characters before or after a wildcard(*)\n For example- *ABC or ABC*");
}
matchArray
包含 [*112,*112,]
。 matchArray
有 3 个组[0]=*112,[1]=*112,[2]= undefined
。
我的分组有问题吗?或者我是否正确添加了 OR 运算符。
最佳答案
您需要将 \*\w{3}
和 \w{3}\*
放入一个捕获组中(并在该捕获组中使用 OR) ,像这样:
^\*\w{3}|\w{3}\*$
之前发生的情况是 \*\w{3}
或 \w{3}\*
实际上与字符串匹配,但是每个都在一个单独的捕获组。这意味着哪个匹配也取决于它存储在的捕获组。
所以:
*ABC
将存储在1st
Capture Group 中(它与第一个模式\*\w{3 }
)ABC*
将存储在2nd
捕获组中(它与第二个模式\w{3}\*
)
关于JavaScript RegEx - 验证后面跟有通配符的 3 个字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747922/