我对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
应该是小写i
的if
,我删除了不必要的括号级别,使其更易于阅读。
您也可以将两个正则表达式合并为一个正则表达式,并立即进行测试:
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]
,这是相同的。