如何检测和添加缺失的电话区号?

How to detect and add missing telephone area codes?

如果我的 iPhone 通讯录中有一个 XXX-YYYY 形式的联系人,点击它拨打它,然后 iPhone 拨打号码 206-XXX-YYYY(206 是美国西雅图的区号,phone 进行拨号和 phone 被拨都是在这里)。

我有一个应用程序通过用户的联系人应用程序提取 phone 号码,我希望能够像这样检测何时缺少区号并将其添加到iOS自己在做

有人知道我该怎么做吗?

我知道 iPhone 的 phone 号码,例如 AAA-BBB-CCCC,所以我可以将 AAA-BBB-CCCC 与 phone 号码进行比较在地址簿中,如果我看到像 XXX-YYYY 这样的数字,那么我可以推断 a) 缺少区号 b) 缺少的区号必须与 iPhone 的区号相同并且所以将 AAA 添加到 XXX-YYYY 之前。

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

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

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

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

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

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

中找到所有国家代码

您是否考虑过使用雷鬼音乐,例如 post: Parse Phone Number into component parts

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

遗憾的是,在很多情况下无法确定缺少区号的号码。你可以做一些事情来帮助提高胜算。

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

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

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

None这个是完美的,不会有错误的假设。一大原因是号码可携带性。例如,当我搬家或更换运营商时,我可以随身携带我的丹佛 phone 号码。