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

时间:2015-01-15 16:19:23

标签: ios libphonenumber

如果我在我的iPhone地址簿中有一个联系人,表格为XXX-YYYY并点击它拨打,那么iPhone拨打号码206-XXX-YYYY(206是美国西雅图的区号,这是拨打电话和拨打电话的电话都是。)

我有一个应用程序通过用户联系人的应用程序提取电话号码,我希望能够检测到区域代码何时缺失,并将其添加到同一个应用程序中就像iOS本身一样。

有人知道我该怎么做吗?

我知道iPhone的电话号码,例如AAA-BBB-CCCC,所以我可以将AAA-BBB-CCCC与地址簿中的电话号码进行比较,如果我看到像XXX这样的号码-YYYY然后我可以推断a)缺少区号和b)缺少的区号必须与iPhone的区号相同,因此将AAA添加到XXX-YYYY。

我知道这个解决方案太简单了,而且可能只适用于北美。

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

我知道libPhoneNumber(及其https://github.com/iziz/libPhoneNumber-iOS的iOS端口),但通过其API我无法看到任何会首先检测手机是否缺少区号的内容数。也许它在那里,但iOS libPhoneNumber端口没有被广泛记录。

任何人都面临并解决了类似的问题吗?

3 个答案:

答案 0 :(得分:1)

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

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

中找到所有国家/地区的代码

答案 1 :(得分:1)

您是否考虑使用此帖子中的雷鬼? Parse Phone Number into component parts

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

答案 2 :(得分:1)

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

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

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

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

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