我可以将2个正则表达式与逻辑“结合”吗?

时间:2011-02-09 16:21:26

标签: regex

我需要将Textbox输入验证为信用卡号。我已经有不同信用卡的正则表达式:

  • 签证:^4[0-9]{12}(?:[0-9]{3})?$
  • 万事达卡:^([51|52|53|54|55]{2})([0-9]{14})$
  • 美国运通:^3[47][0-9]{13}$

和其他许多人。

问题是,我想根据不同的用户使用不同的正则表达式进行验证。例如:对于user1,可以使用Visa和Mastercard,而对于user2,可以使用Visa和American Express。所以我想动态生成一个最终的正则表达式字符串,结合上面的一个或多个正则表达式字符串,如:

user1Regex = Visa regex + "||" + Mastercard regex

user2Regex = Visa regex + "||" + American Express regex

有办法吗?谢谢,

4 个答案:

答案 0 :(得分:14)

您没有陈述您的语言,但出于任何原因我怀疑它是JavaScript。只是做:

var user1Regex = new RegExp('(' + Visaregex + ")|(" + Mastercardregex + ')');
// or if es6:
let user1Regex = new RegExp(`(${Visaregex})|(${Mastercardregex})`);

您也可以使用(?:)来加快执行速度(非捕获分组),但为了便于阅读,我省略了这一点。

答案 1 :(得分:10)

使用|运算符和组都使用parentesis()

^(4[0-9]{12}(?:[0-9]{3})?|([51|52|53|54|55]{2})([0-9]{14})|3[47][0-9]{13})$

如果所有正则表达式都正确,它应该可以正常工作

答案 2 :(得分:2)

您不确定要使用哪种语言,但可以使用单个|来使用逻辑或大多数正则表达式。我的建议是将每个正则表达式存储为字符串,然后在必要时进行连接和编译。

在python中

就像是

visa = "visa_regex"
mastercard = "mastercard_regex"
combined = re.compile(visa + "|" + mastercard)

答案 3 :(得分:0)

组合两个或更多表达式,将每个表达式放在括号中, 并使用:*?

这是按相关性排列的结合标志:

*?示例1:(A)*?(B)

|示例2:A|B

()()示例3:(A)(B)

()|()示例4:(A)|(B)