13

我研究了NSFormatter,NSNumberFormatter和其他格式化类,但找不到内置解决方案。我需要根据国家代码格式化电话号码。

例如,对于美国,我得到一个字符串,例如+16313938888我需要将其格式化为+1(631)393-8888. 问题是我需要对所有格式都这样做。荷兰,我收到一个字符串+31641234567,它将是+31(6)41 23 45 67(类似的)。

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

4

5 回答 5

10

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

于 2012-10-28T21:45:25.027 回答
3

试试这个谷歌解决方案 - https://github.com/me2day/libPhoneNumber-iOS 他们有 C++、Java、Objective-C 等的端口。

于 2013-11-14T08:38:53.493 回答
1

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

于 2012-09-13T14:03:08.610 回答
0

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

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

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

我在https://github.com/lathamglobal/iOS-Phone-Number-Formatter上分享了我的电话号码格式化课程,灵感来自 Ahmed Abdelkader 的工作。它是一个非常小的单类国际电话号码格式化程序,使用刚才提到的 plist。

于 2015-06-30T22:19:18.243 回答
-1

你可以试试这个:

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

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

于 2015-10-03T23:11:37.920 回答