regex 我可以将2正则表达式与逻辑或“组合”吗?

zpqajqem  于 2023-05-08  发布在  其他
关注(0)|答案(4)|浏览(199)

我需要验证文本框输入的信用卡号码。我已经有了不同信用卡的正则表达式:

  • 签证:^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

有办法做到吗?谢啦

goqiplq2

goqiplq21#

你没有说明你的语言,但不管出于什么原因,我怀疑它是JavaScript。只要做:

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

这只是用一个管道|字符组合了两个模式,表示可选匹配。每个模式也用圆括号括起来进行分组。
您还可以使用(?:)来加快执行速度(非捕获分组),但为了可读性,我省略了它。

flseospp

flseospp2#

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

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

如果所有的正则表达式都是正确的,那么它应该可以工作

s1ag04yj

s1ag04yj3#

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

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

cgfeq70w4#

合并两个或多个表达式,将每个表达式放在方括号中,并用途:*?
这是要合并的迹象,按照相关性的顺序:

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

| 示例2:A|B
()()实施例3:(A)(B)
()|()实施例4:(A)|(B)

相关问题