【问题标题】:Assign same numbers in different formats to contact将不同格式的相同号码分配给联系人
【发布时间】:2016-08-28 19:14:08
【问题描述】:

如何将不同格式的相同号码分配给一个联系人?

在股票三星手机应用程序中,

+1 8542569、8542569 和 18542569 在呼叫时均分配给一个联系人:“示例美国”:

即使“Example USA”的电话簿中只列出了 +1 854-256-9:

这适用于每个国家,而不仅仅是美国。这是一个新西兰的例子:

^ 此处,“新西兰示例”列出了 91234567。

而且,我可以致电 91234567、00 64 9-123 4567 或 6491234567,他们都会被分配到“新西兰示例”联系人:

我的问题是:如何在 Java 中为每个国家/地区做同样的事情,就像三星股票应用程序一样?

假设我有 3 个字符串:91234567、00 64 9-123 4567 和 6491234567。 我的应用如何识别他们属于同一个联系人并且他们基本上是同一个号码?

我确信它可以做到,因为三星做到了:)

再次,我希望代码适用于每个国家/地区。

【问题讨论】:

  • 每个国家/地区都有一种国际电话代码格式,这非常很可能在这里用于确定号码是否属于另一个国家/地区。我还敢打赌,没有国际代码(美国为 +1)的隐式数字是根据 SIM 卡注册的区域设置来解释的。但是,“如何做”本身就是一个相当广泛的问题,因为它非常显然可以做到,但是有很多方法可以做到。您提出了哪些特别的努力,您在哪里遇到了麻烦?
  • @Makoto 我已经尝试探索regex 的可能性。但事实证明,这是一项非常艰巨的任务,因为必须为每个国家/地区编写代码。
  • 我怀疑这是唯一的方法。
  • 获取区号和国家代码的列表并执行if ( (number+"").startsWith(contrycode[i])){ number = number.split(contrycode[i])[1]
  • github.com/googlei18n/libphonenumber 可能是您需要知道的全部内容(并且可能就是您的手机使用的库)

标签: java


【解决方案1】:

第 1 部分: 删除起始零。 它们没用。它们可能有用,但删除它们会更容易。 This quora link with be a bit useful

现在,各国的电话号码位数不同。比如,印度有 10 个与新西兰和美国不匹配。

假设每个国家/地区在删除特定区域的代码后都有特定的数字位数。

第 2 部分:您可以使用country codenumber of digits after that 创建一个多维矩阵。匹配起始国家代码,然后验证位数。

这种方法可能与不同的国家有冲突,但我对这件事缺乏了解。 例如。冲突:

Country A: country_code = +1, digits = 6
Country B: country_code = +12, digits =5

+1 234567
+12 34567

【讨论】:

  • 我不愿意说起始零是“无用的”。电话号码与任何其他类型的数字不同,因为它以某种方式神奇地丢弃了前导零。但是,这取决于国家、格式和零之前的其他因素是否重要。
  • 根据我的个人经验,我曾说过他们可能会制造更多麻烦。我还没有看到任何 0 有用的情况,但我会编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多