RegEx:匹配两种模式中的一种

时间:2014-12-22 15:52:01

标签: regex

我有两个正则表达式,一个用于验证手机号码,另一个用于家庭电话号码。

手机号码模式:

^((07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})$

家庭号码模式:

((0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6})$

有没有办法合并这两个表达式,以便我可以将它们应用到“联系号码”字段,如果输入匹配任一表达式,该字段有效?

3 个答案:

答案 0 :(得分:10)

将两个正则表达式放入由交替运算符|分隔的非捕获组中。

^(?:((07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})|((0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6}))$

答案 1 :(得分:2)

将它们与管道或运营商合并。

^((07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})|((0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6})$

答案 2 :(得分:1)

您必须拥有|条件的非捕获组:

^(?:(07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})|(?:(0|0044|\+44)\d{10}|(08)\d{9}|(90)\d{6}|(92)\d{6}|(437)\d{5}|(28)\d{6}|(37)\d{6}|(66)\d{6}|(82)\d{6}|(777)\d{5}|(93)\d{6})$