iPhone的电话号码分割算法?

时间:2011-12-14 02:05:04

标签: algorithm phone-number

iPhone具有非常好的电话号码分割功能,例如:

新加坡手机:+65 9852 4135
新加坡居民专线:+65 6325 6524
中国移动:+86 135-6952-3685
中国居民线:+86 10-65236528
香港:+886 956-238-82
美国:+1(732)865-3286

请注意这里的好功能:
- 分割国家代码,区号和其余部分是自动的;
- 分隔符也很好地被采用到不同的国家,例如“()”,“ - ”和空格。

注意解析逻辑对我来说是可行的,但是,我不知道从哪里可以了解大多数国家的电话号码格式。
我在哪里可以找到这样的知识,或者实现它的开源代码?

3 个答案:

答案 0 :(得分:2)

您可以使用libphonenumber代码库获得类似的功能。

答案 1 :(得分:0)

有趣的是,你不能使用NSNumberFormatter,但你可以为它编写自己的自定义类。只需创建一个新类,设置countryCodeareaCodenumber等属性,然后创建一个根据countryCode格式化数字的方法。

以下是一个很好的例子:http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html

答案 2 :(得分:0)

顺便说一句:一位朋友告诉我他必须保留的 gigantic 正则表达式,可以从世界各地数百个国家的拦截通信中挑选电话号码。这非常重要。

值得庆幸的是,您的问题更容易,因为您可以拥有一个包含每个国家/地区格式的表格:

format[usa] = "+d (ddd) ddd-dddd";
format[hk] = "+ddd ddd-ddd-dd";
format[china_mobile] = "+dd ddd-dddd-dddd";
...

然后,当您进行打印时,只需根据需要从每个d点的电话号码字符串输出一位数字。这假设你知道这个国家,这对于电话设备是一个足够安全的假设 - 选择"默认"少数周边国家的格式。

由于some countries have different formats with different lengths可能需要在表格中存储其他信息:

format[germany][10] = "..."
format[germany][11] = "....."