电话号码规范化:任何预先存在的图书馆?

Dan*_*ert 20 .net c# normalization phone-number .net-2.0

我有一个使用电话号码作为唯一标识符的系统.出于这个原因,我想使用标准化格式格式化所有电话号码.因为我无法控制我的源数据,所以我需要自己解析这些数字并将它们格式化,然后再将它们添加到我的数据库中.

我即将编写一个可以读取电话号码并输出标准化电话格式的解析器,但在此之前,我想知道是否有人知道我可以用来格式化电话号码的任何预先存在的库.

如果没有预先存在的库,那么在创建可能不明显的此功能时,我应该记住哪些事项?

虽然我的系统目前只处理美国号码,但我打算尝试包括对国际号码的支持,以防万一有可能需要它.

编辑我忘了提到我正在使用C#.NET 2.0.

fri*_*ism 21

你可以libphonenumber在谷歌使用.这是一篇博文:

http://blog.appharbor.com/2012/02/03/net-phone-number-validation-with-google-libphonenumber

解析数字就像安装NuGet包一样简单,然后这样做:

var util = PhoneNumberUtil.GetInstance();
var number = util.Parse("555-555-5555", "US");
Run Code Online (Sandbox Code Playgroud)

然后,您可以格式化这样的数字:

util.Format(number, PhoneNumberFormat.E164);
Run Code Online (Sandbox Code Playgroud)

libphonenumber 支持E.164以外的几种格式.


rme*_*dor 5

我目前正在参与OpenMoko项目,该项目正在开发一个完全开源的手机(包括硬件).规范电话号码存在很多麻烦.我不知道是否有人提出了一个很好的解决方案.最大的问题似乎是美国的电话号码,因为有时他们会在前面输入1,有时则没有.根据您在联系人列表中存储的内容,它可能会也可能不会正确显示来电显示信息.我建议剥掉电话号码上的1(虽然我希望大多数人不会首先输入它).您可能还需要在国际号码前面查找加号或国家/地区代码.

您可以查看OpenMoko网站,邮件列表和源代码控制,看看他们是否已经解决了这个问题.


Joe*_*orn 1

只需删除所有非数字,可能使用正则表达式:[^\d]

唯一的例外可能是,如果您想要处理分机号、区分不带区号但具有 3 位数分机号的号码,或者需要处理国际号码。