Leopold Stotch
Leopold Stotch

Reputation: 1522

RegEx: Match one of two patterns

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?

Upvotes: 39

Views: 65666

Answers (3)

Mouser
Mouser

Reputation: 13294

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

Upvotes: 9

nitishagar
nitishagar

Reputation: 9403

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

Upvotes: 5

Avinash Raj
Avinash Raj

Reputation: 174696

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

Upvotes: 40

Related Questions