我可以"结合"2个正则表达式与逻辑或?

Xi *_*ang 14 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
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?谢谢,

chx*_*chx 15

你没有陈述你的语言,但无论出于何种原因,我怀疑它是JavaScript.做就是了:

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

您还可以使用(?:)更快的执行(非捕获分组),但为了便于阅读,我省略了它.


小智 10

使用| 操作员和小组都用parentesis()

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

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