本地化的电话号码格式

我已经看了NSFormatterNSNumberFormatter ,和其他格式类,但无法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中。