JavaScript RegEx - 验证3个字母数字字符,后跟通配符或后面的通配符

时间:2016-04-20 15:05:38

标签: javascript regex

我需要验证表单上的某些字段,我需要检查用户是否在通配符(*)之前或之后输入了至少三个字符。

例如:*ABCAB1*

这就是我所拥有的:

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运算符。

3 个答案:

答案 0 :(得分:1)

您的通配符*必须转义:

 /^(\*\w{3})|(\w{3}\*)$/

否则它是量词。

答案 1 :(得分:1)

您需要将\*\w{3}\w{3}\*放入一个捕获组(并在其中包含OR),如下所示:

^\*\w{3}|\w{3}\*$

之前发生的事情是\*\w{3}\w{3}\*实际上与字符串匹配,但每个字符串都在一个单独的Capture Group中。这意味着哪一个匹配也取决于它所存储的捕获组。

所以:

  • *ABC将存储在 1st捕获组中(它与第一个模式匹配,\*\w{3}
  • ABC*将存储在 2nd捕获群组中(它与第二种模式匹配,\w{3}\*

Live Demo on Regex101

答案 2 :(得分:0)

您的交替中有两个捕获组。如果一个匹配,则另一个保持undefined。你应该使用

^(\*\w{3}|\w{3}\*)$

JS代码

var re = /^(\*\w{3}|\w{3}\*)$/g; 
var str = '*ABC';
var m;

while ((m = re.exec(str)) !== null) {
   if (m.index === re.lastIndex) {
      re.lastIndex++;
   } 
   print(m[0] + "\n" + m[1]);
}

<强> Ideone Demo

&#13;
&#13;
var re = /^(\*\w{3}|\w{3}\*)$/; 
var str = '*ABC';

var result = str.match(re);
document.writeln(result[0] + '<br>');
document.writeln(result[1] + '<br>');
&#13;
&#13;
&#13;

相关问题