Phone validation regex

后端 未结 16 1513
孤城傲影
孤城傲影 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:31
    /^[0-9\+]{1,}[0-9\-]{3,15}$/
    

    so first is a digit or a +, then some digits or -

    0 讨论(0)
  • 2020-11-27 03:32

    I tried :

    ^(1[ \-\+]{0,3}|\+1[ -\+]{0,3}|\+1|\+)?((\(\+?1-[2-9][0-9]{1,2}\))|(\(\+?[2-8][0-9][0-9]\))|(\(\+?[1-9][0-9]\))|(\(\+?[17]\))|(\([2-9][2-9]\))|([ \-\.]{0,3}[0-9]{2,4}))?([ \-\.][0-9])?([ \-\.]{0,3}[0-9]{2,4}){2,3}$
    

    I took care of special country codes like 1-97... as well. Here are the numbers I tested against (from Puneet Lamba and MCattle):

    ***** PASS *****
    18005551234
    1 800 555 1234
    +1 800 555-1234
    +86 800 555 1234
    1-800-555-1234
    1.800.555.1234
    +1.800.555.1234
    1 (800) 555-1234
    (800)555-1234
    (800) 555-1234
    (800)5551234
    800-555-1234
    800.555.1234
    (+230) 5 911 4450
    123345678
    (1) 345 654 67
    +1 245436
    1-976 33567
    (1-734) 5465654
    +(230) 2 345 6568
    ***** CORRECTLY FAILING *****
    (003) 555-1212
    (103) 555-1212
    (911) 555-1212
    1-800-555-1234p
    800x555x1234
    +1 800 555x1234
    ***** FALSE POSITIVES *****
    180055512345
    1 800 5555 1234
    +867 800 555 1234
    1 (800)  555-1234
    86 800 555 1212
    

    Originally posted here: Regular expression to match standard 10 digit phone number

    0 讨论(0)
  • 2020-11-27 03:34

    I have a more generic regex to allow the user to enter only numbers, +, -, whitespace and (). It respects the parenthesis balance and there is always a number after a symbol.

    ^([+]?[\s0-9]+)?(\d{3}|[(]?[0-9]+[)])?([-]?[\s]?[0-9])+$

    false, ""
    false, "+48 504 203 260@@"
    false, "+48.504.203.260"
    false, "+55(123) 456-78-90-"
    false, "+55(123) - 456-78-90"
    false, "504.203.260"
    false, " "
    false, "-"
    false, "()"
    false, "() + ()"
    false, "(21 7777"
    false, "+48 (21)"
    false, "+"
    true , " 1"
    true , "1"
    true, "555-5555-555"
    true, "+48 504 203 260"
    true, "+48 (12) 504 203 260"
    true, "+48 (12) 504-203-260"
    true, "+48(12)504203260"
    true, "+4812504203260"
    true, "4812504203260
    
    0 讨论(0)
  • 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

    0 讨论(0)
  • 2020-11-27 03:37
      ^[0-9\-\+]{9,15}$ 
    

    would match 0+0+0+0+0+0, or 000000000, etc.

      (\-?[0-9]){7}
    

    would match a specific number of digits with optional hyphens in any position among them.

    What is this +077 format supposed to be?

    It's not a valid format. No country codes begin with 0.

    The digits after the + should usually be a country code, 1 to 3 digits long.

    Allowing for "+" then country code CC, then optional hyphen, then "0" plus two digits, then hyphens and digits for next seven digits, try:

      ^\+CC\-?0[1-9][0-9](\-?[0-9]){7}$
    

    Oh, and {3,3} is redundant, simplifes to {3}.

    0 讨论(0)
  • 2020-11-27 03:39

    Please refer to this SO Post

    example of a regular expression in jquery for phone numbers

    /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
    
    • (123) 456 7899
    • (123).456.7899
    • (123)-456-7899
    • 123-456-7899
    • 123 456 7899
    • 1234567899

    are supported

    0 讨论(0)
提交回复
热议问题