我查看过NSFormatter
,NSNumberFormatter
和其他格式化类,但找不到构建到解决方案中。我需要根据国家/地区代码格式化电话号码。
例如,对于US,我会收到+16313938888
这样的字符串,我需要格式化为+1(631)393-8888
。问题是我需要为所有格式执行此操作。荷兰,我收到一个+31641234567
字符串+31(6)41 23 45 67
(类似的东西)。
200多个国家的硬编码太繁琐了,我真的不知道所有的格式规则。在我正在忽略的文档中有什么东西,或者有人知道一个管理它的开源类吗?
答案 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
它直接为您提供电话号码的字符串,无需格式化。但是,如果使用国际前缀保存号码,您也可以在结果字符串中保存它。