本地化的电话号码格式
我已经看了NSFormatter
, NSNumberFormatter
,和其他格式类,但无法find解决scheme的构build。 我需要根据国家代码格式化电话号码。
例如,对于美国,我得到一个string,如+16313938888
,我需要格式化为+1(631)393-8888
。 问题是我需要为所有格式做这个。 荷兰,我收到一个string+31641234567
这将是+31(6)41 23 45 67
(类似的东西)。
对200多个国家的硬编码太乏味了,我真的不知道所有的格式规则。 在我看到的文档中是否存在某些东西,或者是否有人知道pipe理此类的开放源代码类?
有关iOS特定的解决scheme,请参阅https://github.com/rmaddy/RMPhoneFormat 。
试试这个Google解决scheme – https://github.com/me2day/libPhoneNumber-iOS它们有C ++,Java,Objective-C和其他的端口。
不幸的是,iOS没有任何公共的API。 您可以尝试集成libphonenumber ,这是一个完整的parsing和格式化国际电话号码的实现。 它有一个C ++版本,所以理论上你可以交叉链接。
你绝对不想硬编码所有的各种国家格式。 每个国家通常有3-5种格式。 而应使用格式数据库(如plist),并根据给定的国家代码编写代码来格式化数字。
一个好的国际格式属性列表“UIPhoneFormats.plist”可以在这里find: 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分享了我的电话号码格式化程序,受到Ahmed Abdelkader工作的启发。 这是一个非常小的,单一的国际电话号码格式化,使用刚才提到的plist。
你可以试试这个:
let phoneNumber : CNPhoneNumber let digits = phoneNumber.performSelector("digits").takeRetainedValue() as! String
它直接给你的string,没有格式,与电话号码。 但是,如果号码是以国际前缀保存的,您也将在结果string中。