Mojtaba Delshad
Mojtaba Delshad

Reputation: 107

Combine two regular expressions for php

I have these two regular expression

^(((98)|(\+98)|(0098)|0)(9){1}[0-9]{9})+$
^(9){1}[0-9]{9}+$

How can I combine these phrases together?

valid phone :

just start with : 0098 , +98 , 98 , 09 and 9
sample :
00989151855454
+989151855454
989151855454
09151855454
9151855454

Upvotes: 0

Views: 971

Answers (3)

Allan
Allan

Reputation: 12438

This regex

^(?:98|\+98|0098|0)?9[0-9]{9}$

matches

00989151855454
+989151855454
989151855454
09151855454
9151855454

Demo: https://regex101.com/r/VFc4pK/1/

However note that you are requiring to have a 9 as first digit after the country code or 0.

Upvotes: 2

Pushpesh Kumar Rajwanshi
Pushpesh Kumar Rajwanshi

Reputation: 18357

Looking at your second regex, it looks like you want to make the first part ((98)|(\+98)|(0098)|0) in your first regex optional. Just make it optional by putting ? after it and it will allow the numbers allowed by second regex. Change this,

^(((98)|(\+98)|(0098)|0)(9){1}[0-9]{9})+$

to,

^(?:98|\+98|0098|0)?9[0-9]{9}$
                   ^ this makes the non-grouping pattern optional which contains various alternations you want to allow.

I've made few more corrections in the regex. Use of {1} is redundant as that's the default behavior of a character, with or without it. and you don't need to unnecessarily group regex unless you need the groups. And I've removed the outer most parenthesis and + after it as that is not needed.

Demo

Upvotes: 3

BritishWerewolf
BritishWerewolf

Reputation: 3968

You haven't provided what passes and what doesn't, but I think this will work if I understand correctly...

/^\+?0{0,2}98?/

Live demo

^         Matches the start of the string
\+?       Matches 0 or 1 plus symbols (the backslash is to escape)
0{0,2}    Matches between 0 and 2 (0, 1, and 2) of the 0 character
9         Matches a literal 9
8?        Matches 0 or 1 of the literal 8 characters

Upvotes: 3

Related Questions