将电话号码解析为组成部分

发布于 2024-07-07 00:51:28 字数 303 浏览 8 评论 0原文

我需要一个经过良好测试的正则表达式(首选 .net 风格),或一些其他简单的代码,将美国/加拿大电话号码解析为组成部分,因此:

  • 3035551234122
  • 1-303-555-1234x122
  • (303)555-1234 -122
  • 1 (303) 555 -1234-122

等...

全部解析为:

  • 区域代码:303
  • 交换:555
  • 后缀:1234
  • 扩展:122

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:

  • 3035551234122
  • 1-303-555-1234x122
  • (303)555-1234-122
  • 1 (303) 555 -1234-122

etc...

all parse into:

  • AreaCode: 303
  • Exchange: 555
  • Suffix: 1234
  • Extension: 122

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

唱一曲作罢 2024-07-14 00:51:28

首先删除所有不是数字的内容。 然后所有示例都简化为:

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

支持所有国家/地区代码稍微复杂一些,但适用相同的一般规则。

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.

秋意浓 2024-07-14 00:51:28

例如,这是一个与 GeoIP 一起使用的编写良好的库:

http://highway.to/geoip/numberparser。公司

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

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

等往事风中吹 2024-07-14 00:51:28

这是 Z Directory (vettrasoft.com) 提供的一种更简单的方法,
针对美国电话号码:

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();

最后一行将号码存储到数据库表“phone_number”中。
列值:country_code =“1”,area_code =“888”,exchange =“872”,
ETC。

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.

何处潇湘 2024-07-14 00:51:28

这个正则表达式与您的示例完全一样:

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"];

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"];
帅哥哥的热头脑 2024-07-14 00:51:28

这是我使用的:

^(?:(?:[\+]?(?<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}))?$

我相信我是从 RegexLib 那里得到的。

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.

数理化全能战士 2024-07-14 00:51:28

到目前为止给出的答案对我来说都不够强大,所以我继续寻找更好的东西,然后我找到了它:

Google 处理电话号码的库

希望它对您也有用。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文