Javascript-在一行中评估多个正则表达式



我对Javascript中的正则表达式还很陌生,我正在尝试做一些看似简单的事情,但失败了。基本上,我需要评估一个字符串是否满足2个正则表达式条件中的1个。基本上,一个输入字符串可以有两种形式中的一种,其中任何一种都有效,其他任何形式都无效。

假设我有两个正则表达式:a= ^[0-9]d{3}$b= ^1-d{5},并希望在继续之前查看输入字符串是否匹配。我想做的是这样的事情:

If((!a.test(input)) || (!b.test(input)))
{
   alert("Invalid ID");
}

我还尝试了一种使用"|"运算符的变体:

if((!a|!b.test(input)))

但到目前为止,一切都没有奏效。通常,我会得到一个语句来验证它们中的一个或不验证它们,但绝不会同时验证两者。我不确定我在这里做错了什么。

谢谢!

我认为您的布尔逻辑是错误的。为了在继续之前匹配其中一个或另一个,失败的情况是当它不匹配两个测试时,如下所示:

if(!a.test(input) && !b.test(input))
{
   alert("Invalid ID");
}

此外,您的If应该是小写iif,我删除了不必要的括号级别,使其更易于阅读。

您也可以将两个正则表达式合并为一个正则表达式,并立即进行测试:

var re = /^[0-9]d{3}$|^1-d{5}/;
if (!re.test(input)) {
    alert("Invalid ID");
}

此外,您没有显示真实的代码,但正则表达式并没有声明您在问题中如何使用它们。也许这正是你将它们复制到问题中的方式,但它们使用/regex here/语法,即:

var a = /^[0-9]d{3}$/;
var b = /^1-d{5}/;

注意:在您的第二个正则表达式中,您是否希望它像第一个一样在末尾有一个$

我会这样做:

if (!input.match(/^(d{4}|1-d{5})$/)) {
    alert('Invalid ID');
}

注意,我使用了d而不是[0-9],这是相同的。

最新更新