3

我对 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 个或一个都不验证的声明,但绝不会同时验证两者。我不确定我在这里做错了什么。

谢谢!

4

2 回答 2

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

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

于 2012-08-28T21:24:41.907 回答
0

我会这样做:

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

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

于 2012-08-28T21:29:11.403 回答