RegEx: Match one of two patterns

2020-07-02 22:05发布

I have two regular expressions, one for validating a mobile number and one for a house phone number.

Mobile number pattern:

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

Home number pattern:

((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})$

Is there a way to combine both of these expressions so that I can apply them to a 'Contact Number' field that would be valid if the input matched either expression?

标签: regex
3条回答
老娘就宠你
2楼-- · 2020-07-02 22:48

You can have to non-capturing groups with a | condition:

^(?:(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楼-- · 2020-07-02 22:53

Put both regexes into a non-capturing group separated by an alternation operator |.

^(?:((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}))$
查看更多
smile是对你的礼貌
4楼-- · 2020-07-02 23:02

Combine them with a pipe it's the or operator.

^((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})$
查看更多
登录 后发表回答