![](/img/trans.png)
[英]javascript regex to validate alphanumeric text with spaces and reject special characters
[英]JavaScript RegEx - Validate 3 alphanumeric characters followed by or following wildcard
我需要验证表单上的某些字段,在该表单上,我需要检查用户是否在通配符( *
)之前或之后输入了至少三个字符。
例如: *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}\*)$/
否则,它是一个量词。
您需要将\\*\\w{3}
和\\w{3}\\*
放入一个捕获组(并在该捕获组中包含OR),如下所示:
^\*\w{3}|\w{3}\*$
之前发生的是\\*\\w{3}
或\\w{3}\\*
实际上与字符串匹配,但是每个字符串都位于单独的捕获组中。 这意味着哪个匹配项还取决于它存储在其中的捕获组。
所以:
*ABC
将存储在第1st
捕获组中 (它与第一个模式\\*\\w{3}
匹配) ABC*
将存储在2nd
捕获组中 (它与第二个模式\\w{3}\\*
匹配) 轮换中有两个捕获组。 如果一个匹配,则另一个保持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]);
}
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.