^(\+98|0)?9\d{9}$
var regex = new RegExp('^(\\+98|0)?9\\d{9}$');
var result = regex.test('+989031234567');
console.log(result);
^(\+98|0)?9\d{9}$
var regex = new RegExp('^(\\+98|0)?9\\d{9}$');
var result = regex.test('+989031234567');
console.log(result);
^09(1[0-9] |2[0-2] |3[0-9] |9[0-9]) [0-9]{7}$
I think this is much much better:
^(0|0098|\+98)9(0[1-5]|[1 3]\d|2[0-2]|98)\d{7}$
Side notes:
- And as @PAPIONbit mentioned you need to sanitize the data before validation.
- And I like to save one format in the database: so I convert all phone numbers to 0098 (for Iran), and for an international app I would like to prefix all numbers with their country code.
This one works perfectly, also a small change so its works for this format to : 9110000000
edited regex: /^(0|0098|\+98|)9(0[1-5]|[1 3]\d|2[0-2]|98)\d{7}$/i
hey guys
you can use this regex and enjoy:
/^((98|\+98|0098|0)*(9)[0-9]{9})+$/
look at this image:

in this you can validation persian phone number like:
9120000000
09120000000
00989120000000
+989120000000
989120000000
also you can see this git repository and use other regex validating, filtering, sanitizing and finding Persian strings in laravel framework and kotlin.