Phone validation regex

后端 未结 16 1521
孤城傲影
孤城傲影 2020-11-27 02:56

I\'m using this pattern to check the validation of a phone number

^[0-9\\-\\+]{9,15}$

It\'s works for 0771234567 and +0

16条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-27 03:36

    This solution actually validates the numbers and the format. For example: 123-456-7890 is a valid format but is NOT a valid US number and this answer bears that out where others here do not.


    If you do not want the extension capability remove the following including the parenthesis: (?:\s*(?:#|x.?|ext.?|extension)\s*(\d+)\s*)? :)

    edit (addendum) I needed this in a client side only application so I converted it. Here it is for the javascript folks:

    var myPhoneRegex = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$/i;
    if (myPhoneRegex.test(phoneVar)) {
        // Successful match
    } else {
        // Match attempt failed
    }
    

    hth. end edit

    This allows extensions or not and works with .NET

    (?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
    

    To validate with or without trailing spaces. Perhaps when using .NET validators and trimming server side use this slightly different regex:

    (?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$
    

    All valid:

    1 800 5551212

    800 555 1212

    8005551212

    18005551212

    +1800 555 1212 extension65432

    800 5551212 ext3333

    Invalid #s

    234-911-5678

    314-159-2653

    123-234-5678


    EDIT: Based on Felipe's comment I have updated this for international.

    Based on what I could find out from here and here regarding valid global numbers

    This is tested as a first line of defense of course. An overarching element of the international number is that it is no longer than 15 characters. I did not write a replace for all the non digits and sum the result. It should be done for completeness. Also, you may notice that I have not combined the North America regex with this one. The reason is that this international regex will match North American numbers, however, it will also accept known invalid # such as +1 234-911-5678. For more accurate results you should separate them as well.

    Pauses and other dialing instruments are not mentioned and therefore invalid per E.164

    \(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
    

    With 1-10 letter word for extension and 1-6 digit extension:

    \(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?(\w{1,10}\s?\d{1,6})?
    

    Valid International: Country name for ref its not a match.

    +55 11 99999-5555 Brazil

    +593 7 282-3889 Ecuador

    (+44) 0848 9123 456 UK

    +1 284 852 5500 BVI

    +1 345 9490088 Grand Cayman

    +32 2 702-9200 Belgium

    +65 6511 9266 Asia Pacific

    +86 21 2230 1000 Shanghai

    +9124 4723300 India

    +821012345678 South Korea

    And for your extension pleasure

    +55 11 99999-5555 ramal 123 Brazil

    +55 11 99999-5555 foo786544 Brazil

    Enjoy

提交回复
热议问题