Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regular expression for GB based and only numeric phone number

I want a regular expression code which allows only numeric phone number (e.g 1234567890) as well as GB format number (e.g 123-456-7890).

This expression must have to work for both conditions.

Currently I am using below regular expression which only allows GB phone number

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/ 

I need help to allow only numeric number also.

like image 629
sandeepsure Avatar asked Jul 17 '12 07:07

sandeepsure


2 Answers

There are some UK phone number regular expressions here.

The most highly rated one from that page is:

^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$

It is described as:

Matches     +447222555555   | +44 7222 555 555 | (0722) 5555555 #2222
Non-Matches (+447222)555555 | +44(7222)555555  | (0722) 5555555 #22

Personally I would not put a strict regex on a phone number unless it is absolutely required to have the users actual phone number for identity verification or something involving payments. There are lots of variations of phone numbers, some users could even use Skype as their primary phone, and by putting a validation on you're just going to block/frustrate users.

Also note you have got the UK format wrong, UK phone numbers should contain 11 digits and are normally in the format (01234) 123123 - we never use dashes and first number should always be a 0.

like image 180
Dunhamzzz Avatar answered Oct 28 '22 11:10

Dunhamzzz


UK phone numbers should contain 11 digits

UK phone numbers usually have 9 or 10 digits not including the 0 trunk code or +44 country code. A few have only 7 digits.

and are normally in the format (01234) 123123

The example shows a UK 4+6 format number. The UK uses a variety of formats including 2+8, 3+7, 4+6, 4+5, 5+5 and 5+4 for geographic numbers and 0+10, 0+9 and 0+7 for non-geographic numbers.

There's a handy list at:

http://www.aa-asterisk.org.uk/index.php/Number_format

Match UK telephone number in any format

^(?:(?:\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)44\)?[\s-]?(?:\(?0\)?[\s-]?)?)|(?:\(?0))(?:(?:\d{5}\)?[\s-]?\d{4,5})|(?:\d{4}\)?[\s-]?(?:\d{5}|\d{3}[\s-]?\d{3}))|(?:\d{3}\)?[\s-]?\d{3}[\s-]?\d{3,4})|(?:\d{2}\)?[\s-]?\d{4}[\s-]?\d{4}))(?:[\s-]?(?:x|ext\.?|\#)\d{3,4})?$ 

The above pattern allows the user to enter the number in any format they are comfortable with. Don't constrain the user into entering specific formats.

Extract NSN, prefix and extension

^(\(?(?:0(?:0|11)\)?[\s-]?\(?|\+)(44)\)?[\s-]?)?\(?0?(?:\)[\s-]?)?([1-9]\d{1,4}\)?[\d[\s-]]+)((?:x|ext\.?|\#)\d{3,4})?$

$2 will be '44' if international format was used, otherwise assume national format.

$4 contains the extension number if present.

$3 contains the NSN part.

Validation and formatting

Use further RegEx patterns to check the NSN has the right number of digits for this number range. Finally, store the number in E.164 format or display it in E.123 format.

There's a very detailed list of validation and display formatting RegEx patterns for UK numbers at:

Regular Expressions for Validating and Formatting GB Telephone Numbers

It's too long to reproduce here and it would be difficult to maintain multiple copies of this document.

like image 42
g1smd Avatar answered Oct 28 '22 09:10

g1smd