2

如果我的 iPhone 通讯录中有一个 XXX-YYYY 形式的联系人,然后点击它进行拨号,那么 iPhone 会拨打号码 206-XXX-YYYY(206 是美国西雅图的区号,这是电话所在的位置拨号和正在拨打的电话都是)。

我有一个应用程序,它通过用户的联系人应用程序提取电话号码,我希望能够检测到何时缺少这样的区号,并像 iOS 本身一样添加它。

有人知道我该怎么做吗?

我知道 iPhone 的电话号码,例如 AAA-BBB-CCCC,所以我可以将 AAA-BBB-CCCC 与通讯簿中的电话号码进行比较,如果我看到类似 XXX-YYYY 的数字,那么我可以推断出) 缺少区号和 b) 缺少的区号必须与 iPhone 的区号相同,因此将 AAA 添加到 XXX-YYYY。

我知道这将是一个过于简单的解决方案,并且可能只适用于北美。

那么 iPhone 是如何做到的,是否有适用于所有国家的可扩展解决方案?

我知道 libPhoneNumber (以及它的 iOS 端口https://github.com/iziz/libPhoneNumber-iOS),但是通过它的 API,我看不到任何可以首先检测到是否缺少区号的东西电话号码。也许它在那里,但 iOS libPhoneNumber 端口没有被广泛记录。

有人遇到并解决了与此类似的问题吗?

4

3 回答 3

1

您是否考虑过使用像这篇文章中的雷鬼音乐: Parse Phone Number into components parts

我并不是说它适用于国际解决方案,但至少这是一个开始

于 2015-01-23T11:28:38.427 回答
1

不幸的是,在许多情况下无法确定缺少区号的号码。你可以做一些事情来帮助赔率。

首先,您可以假设 7 位数字与用户的电话号码在同一个区号中,只需附加区号即可。

其次,由于美国的许多地方都有多个区号(例如,丹佛有区号 303 和 720),您可以检查区号和前缀的组合是否有效。一些服务和数据库包含此信息,例如http://www.ccmi.com/npa-nxx-rate-center-lookup。(请注意,区号称为 NPA,前缀称为 NXX。)NPA-NXX 组合可以告诉您位置,通常是它所属的运营商和电信交换机。

第三,如果您将地址信息与电话号码一起阅读,那么您将拥有明显的优势。由于 NPA-NXX 是特定于位置的,因此您可以使用该位置数据来更好地验证正确的区号。

这些都不是完美的,并且会做出错误的假设。一个重要原因是号码可携带性。例如,当我搬家或更换运营商时,我可以随身携带我的丹佛电话号码。

于 2015-01-25T13:41:06.230 回答
1

我们如何检测电话区号?如果号码有拨号代码,则拨号代码始终位于号码字符串的起始位置。区号的最大字符串长度为 4。最小字符串长度为 1。我们需要创建递归逻辑来检查前 4 个字符的字符串。从长度为 1 的子字符串开始。并与拨号代码数组进行比较。如果拨号代码数组没有子字符串对象。然后递归地增加拨号代码的长度。最大子字符串长度为 4。如果数组包含子字符串对象,则中断递归循环。该子字符串是电话代码。

您需要为所有国家代码创建一个静态数组。您可以从这里找到所有国家/地区代码

于 2015-01-23T11:19:35.363 回答