【发布时间】:2012-01-03 20:55:48
【问题描述】:
我可以使用 iOS 上的通讯簿框架从设备中检索联系人的电话号码。如何区分或识别哪个是国家代码,哪个是实际电话号码? 有可能吗?
【问题讨论】:
标签: ios parsing addressbook phone-number
我可以使用 iOS 上的通讯簿框架从设备中检索联系人的电话号码。如何区分或识别哪个是国家代码,哪个是实际电话号码? 有可能吗?
【问题讨论】:
标签: ios parsing addressbook phone-number
国家/地区电话代码很容易从电话号码中检测到。
您需要做的第一件事是将调用代码解析成一棵树,其中每个数字代表一个分支。
然后,查找国家代码就像遍历树一样简单,逐个数字,直到找到国家代码匹配的最后一个分支。
此时(2016 年 7 月),最长的国家/地区呼叫代码有 5 位数字,因此您的树不应超过 5 级分支。
【讨论】:
经过一些研究,我发现这个库似乎可以完成这项工作: https://github.com/iziz/libPhoneNumber-iOS
【讨论】:
国家代码是一个相当混乱的话题,但足够标准,通过一些程序员维护你可以解决它。
您可以通过其初始子序列来识别国家/地区代码。执行以下算法:
构建一个简单的数据库 - 甚至可以存储为平面文件并加载到内存中的字典中 - 国家代码。
从 n = 1 到 3 递归,检查电话号码的前 n 位是否与任何国家/地区代码匹配。如果是这样,那是您的国家/地区代码。如果尝试 3 失败,则它不是有效的国家/地区代码。
如果您喜欢处理准歧义。如果您看到国家/地区代码之间的重叠,例如如果您看到维尔京群岛的“1340”,那是因为在某些可能不相关的意义上,它是美国国家代码“1”的子集。国家代码有时反映地缘政治情况,通常通过将国家代码拆分为下一位来表示。 “1”将是官方国家代码,但您更感兴趣的代码取决于您的应用程序。
注意:当认为苏联解体发生时,这需要维护。
现在,当您必须处理一些 #s 上已经有国家代码而有些没有的事实时,事情变得更加混乱。我发现的唯一一个国家代码也可以作为主要区号出现的国家代码是新加坡——我认为它是+65-65...。您可以准确地使用以下业务逻辑:
【讨论】:
我所做的是在维基百科上创建一个包含所有国家/地区呼叫代码的数组。然后,当我有电话号码时,我会尝试将前四位数字与其中一个国家/地区电话代码相匹配。如果不匹配,请尝试前三位数字,依此类推。最终我找到了调用代码。
【讨论】:
我们无法通过电话号码识别国家代码。
【讨论】: