繁体   English   中英

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

[英]JavaScript RegEx - Validate 3 alphanumeric characters followed by or following wildcard

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

例如: *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运算符。

您的通配符*必须转义:

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

否则,它是一个量词。

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

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

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

所以:

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

Regex101上的现场演示

轮换中有两个捕获组。 如果一个匹配,则另一个保持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演示

 var re = /^(\\*\\w{3}|\\w{3}\\*)$/; var str = '*ABC'; var result = str.match(re); document.writeln(result[0] + '<br>'); document.writeln(result[1] + '<br>'); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM