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

时间:2012-08-28 21:22:39

标签: javascript regex

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

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

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

我也尝试过使用“|”的变体操作者:

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

但到目前为止没有任何效果。通常我会得到声明来验证1或者没有,但从来没有。我不确定我在这里做错了什么。

谢谢!

2 个答案:

答案 0 :(得分:7)

我认为你的布尔逻辑是错误的。要在继续之前匹配一个或另一个,失败的情况是它不匹配这两个测试:

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

此外,If应为if,并且小写i,我删除了不必要的括号级别,以使其更容易阅读。

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

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}/;

注意:在你的第二个正则表达式中,你是否打算让它像第一个一样在最后有一个$

答案 1 :(得分:0)

我会这样做:

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

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