本地化电话号码格式

时间:2012-09-13 13:45:19

标签: objective-c ios string localization formatting

我查看过NSFormatterNSNumberFormatter和其他格式化类,但找不到构建到解决方案中。我需要根据国家/地区代码格式化电话号码。

例如,对于US,我会收到+16313938888这样的字符串,我需要格式化为+1(631)393-8888。问题是我需要为所有格式执行此操作。荷兰,我收到一个+31641234567字符串+31(6)41 23 45 67(类似的东西)。

200多个国家的硬编码太繁琐了,我真的不知道所有的格式规则。在我正在忽略的文档中有什么东西,或者有人知道一个管理它的开源类吗?

5 个答案:

答案 0 :(得分:10)

有关iOS特定解决方案的信息,请参阅https://github.com/rmaddy/RMPhoneFormat

答案 1 :(得分:3)

试用此Google解决方案 - https://github.com/me2day/libPhoneNumber-iOS 它们具有C ++,Java,Objective-C等的端口。

答案 2 :(得分:1)

不幸的是,iOS没有任何公共API。您可以尝试集成libphonenumber,这是解析和格式化国际电话号码的完整实现。它有一个C ++版本,所以理论上你可以用它交叉链接。

答案 3 :(得分:0)

您绝对不希望硬编码所有各种国家/地区格式。每个国家通常有3-5种格式。相反,使用格式数据库(例如plist)并编写代码以根据给定的国家/地区代码格式化数字。

一个好的国际格式属性列表'UIPhoneFormats.plist'可以在这里找到:https://code.google.com/p/iphone-patch/source/browse/trunk/bgfix/UIKit.framework/PhoneFormats/UIPhoneFormats.plist?r=7

在该列表中,'$'允许任何字符,'#'必须是数字,并且'(空格)','(',')'和' - '插入数字之间。用户键入的非数字字符提示为所需格式。

我在艾美德·阿卜杜勒卡德尔的作品的启发下,在https://github.com/lathamglobal/iOS-Phone-Number-Formatter分享了我的电话号码格式化课程。它是一个非常小的单级国际电话号码格式化器,使用刚才提到的plist。

答案 4 :(得分:-1)

你可以试试这个:

    let phoneNumber : CNPhoneNumber
    let digits = phoneNumber.performSelector("digits").takeRetainedValue() as! String

它直接为您提供电话号码的字符串,无需格式化。但是,如果使用国际前缀保存号码,您也可以在结果字符串中保存它。