Parse Phone Number into component parts

后端 未结 6 1220
太阳男子
太阳男子 2020-12-31 11:27

I need a well tested Regular Expression (.net style preferred), or some other simple bit of code that will parse a USA/CA phone number into component parts, so:

相关标签:
6条回答
  • 2020-12-31 12:00

    Strip out anything that's not a digit first. Then all your examples reduce to:

    /^1?(\d{3})(\d{3})(\d{4})(\d*)$/

    To support all country codes is a little more complicated, but the same general rule applies.

    0 讨论(0)
  • 2020-12-31 12:05

    None of the answers given so far was robust enough for me, so I continued looking for something better, and I found it:

    Google's library for dealing with phone numbers

    I hope it is also useful for you.

    0 讨论(0)
  • 2020-12-31 12:09

    This regex works exactly as you want with your examples:

    Regex regexObj = new Regex(@"\(?(?<AreaCode>[0-9]{3})\)?[-. ]?(?<Exchange>[0-9]{3})[-. ]*?(?<Suffix>[0-9]{4})[-. x]?(?<Extension>[0-9]{3})");
    Match matchResult = regexObj.Match("1 (303) 555 -1234-122");
    
    // Now you have the results in groups 
    matchResult.Groups["AreaCode"];
    matchResult.Groups["Exchange"];
    matchResult.Groups["Suffix"];
    matchResult.Groups["Extension"];
    
    0 讨论(0)
  • 2020-12-31 12:12

    Here is a well-written library used with GeoIP for instance:

    http://highway.to/geoip/numberparser.inc

    0 讨论(0)
  • 2020-12-31 12:18

    This is the one I use:

    ^(?:(?:[\+]?(?<CountryCode>[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?<AreaCode>[\d]{3})[\-/)]?(?:[ ]+)?)?(?<Number>[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?<Ext>[\d]{1,5}))?$
    

    I got it from RegexLib I believe.

    0 讨论(0)
  • 2020-12-31 12:22

    here's a method easier on the eyes provided by the Z Directory (vettrasoft.com), geared towards American phone numbers:

    string_o s2, s1 = "888/872.7676";
    z_fix_phone_number (s1, s2);
    cout << s2.print();      // prints "+1 (888) 872-7676"
    phone_number_o pho = s2;
    pho.store_save();
    

    the last line stores the number to database table "phone_number". column values: country_code = "1", area_code = "888", exchange = "872", etc.

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