我需要将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
有办法吗?谢谢,
答案 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)
您不确定要使用哪种语言,但可以使用单个|
来使用逻辑或大多数正则表达式。我的建议是将每个正则表达式存储为字符串,然后在必要时进行连接和编译。
就像是
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)