此问题并非特定于Android,但我已添加了标记。
我需要能够以某种标准形式存储电话号码(理想情况下是字符串),可以快速测试/评估相等性(因此字符串是理想的)
我已经找到了一些答案,最好的答案指向http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html(我可以使用库为我做这件事)
但这还不够好,我已经尝试了各种格式编号,了解了可编辑工厂使用该类中的一些静态方法,但它们似乎没有返回我的形式期待。
我期待像电话号码哈希一样,两个输入代表相同的数字会产生相同的“标准格式”,并且可以拨打此标准格式并且没问题。我认为所有各种各样的+ s和诸如此类的东西都是这种标准形式的短手。
我不确定现在是否存在这样的事情。
据我所知,有些东西意味着“当前区域”(或国家),这就是为什么陆线可以省略区号,我期望一个功能可以返回当前位置的格式(但这不适用于手机,如果它是一个前置区域代码的地面线,例如,这将(更接近)我保持假设的“标准形式”)
我很确定存在一些完整的电话号码,考虑电话系统是如何工作的(我推断我承认)应该有一个表格可以识别整个星球上唯一的数字,当这个时候情况并非如此(例如来自没有区号的陆线的本地电话),这是一种优化。
所以我有两个问题:
如何将电话号码“扩展”为该号码的唯一字符串,以便将该号码(带空格,0或+44 ....)的任何替代形式“扩展”为此唯一号码?
是否有任何ISO(/ IEC?)(O代表什么?)标准文件,草案向公众开放?我已经阅读了维基百科页面(很久以前,我花了很多时间浏览wiki,并打开了数百个标签)但它包含了历史记录,或者有关格式化的一些信息),我想更多地了解这个事情。我现在已经习惯了大约8年左右。
此外,为什么Windows Phone 8是一个标签?为了让12位自豪的Lumina车主不被遗忘? (它被建议作为标签!)
附录
不幸的是Any API in android to normalize phone number那里没有解决方案(这包括libphonenumber),我寻找的内容导致了一些有趣的读物:
http://en.wikipedia.org/wiki/Panel_switch
http://en.wikipedia.org/wiki/Nonblocking_minimal_spanning_switch
http://en.wikipedia.org/wiki/Telephone_exchange
我仍然不能断定数字没有“完整形式”。
我不敢创建一个简单地将+44换成0等等的解决方案。
答案 0 :(得分:3)
在阅读了您的问题之后,我被提醒了Google的名为libphonenumber的图书馆。它是谷歌的通用库,用于解析,格式化,存储和验证国际电话号码。它执行以下操作(其中一些似乎可以使用):
就国际电话号码格式而言,E.164格式是国际电信联盟推荐的。它定义了全球公共交换电话网络的编号方案,是国际电话号码的一般格式(通常是+
的统计数据,后跟国家代码,区号和号码)。
使用上述库,如果您提及国际代码和电话号码(美国和加拿大的示例1
),则可以检查所有电话号码的有效性。如果您没有代码但是您知道要检查其编号的国家/地区名称,那么您也可以进行验证。您还可以使用此库转换1个标准E.164
格式的所有有效数字。您还可以“扩展”该特定国家/地区的本地国家/地区格式的数字。您也可以将其另存为String。虽然它确实使用了您在问题中提到的PhoneNumberUtils
。
我不确定这是否是您正在寻找的,但我希望这些信息可以帮助您。