处理电话号码格式

时间:2011-10-10 00:38:27

标签: java android telephony phone-number

我想我在这里面临一个悖论。

我要做的是当我收到/拨打电话时,我有号码,所以我需要知道它是国际号码,是否是本地号码等。

问题是:

  1. 让我知道一个数字是否是国际性的,我需要解析它并检查它的长度,但是,长度因国家而异,那么,我应该采用一种方法来解析和识别每个国家吗? (在我看来不起作用);
  2. 让我知道它是否是本地号码,我需要区号,所以我必须做同样的事情,解析数字并检查长度,根据区号长度得到第一个数字;
  3. 很难找到解决方案。图书馆libphonenumber提供了很多有用的课程,但我认为可以帮助我的课程,让我接受了另一个悖论。

    方法phoneUtil.parse(number,countryAcronym)返回带有国家代码的号码,但它的作用是,如果我用首字母缩略词“US”传递号码,它会返回国家代码为“1”的号码,现在如果我将首字母缩略词更改为“BR”,则会更改数字并返回“55”,这是巴西的国家/地区代码。所以,无论如何,我需要基于我得到的数字的国家首字母缩略词。

    EX:

    numberReturned = phoneUtil.parse(phoneNumber, "US");
    phoneUtil.format(numberReturned, PhoneNumberFormat.INTERNATIONAL);
    

    上述代码返回美国国家/地区代码的编号,但现在如果我将“美国”更改为任何其他国家/地区的首字母缩略词,它将返回相同的数字,但会返回该国家/地区的国家/地区代码。

    我知道这个lib不应该猜测这个数字来自哪个国家(这真是太棒了!!),但这就是我需要的。

    这真让我的头脑变得疯狂。我需要来自明智的法师的好建议。

    如果你能帮我做出一个好的决定,我会非常感激。

    感谢。


    PS:如果你已经使用了libphonenumber并且对此有更多的经验,请指导我使用哪个类,如果有能够解决这个问题。 =)

1 个答案:

答案 0 :(得分:0)

1)phoneUtil.parse的第二个参数必须与您当前所在的国家/地区匹配 - 如果收到的电话号码不包含国际前缀,则使用该参数。这就是为什么当您更改参数时会得到不同的结果:您传递的电话号码不包含这样的前缀,因此它只使用您告诉它的内容。

设置确定电话号码是否为国际号码的任何解析解决方案都需要注意这一点:根据来源,即使国家号码也可以用国际拨号前缀表示(通常抽象为+,因为它国家之间有所不同,但这不能保证)。

2)对于区域代码解析,没有通用标准;一些国家不使用它们,即使在一个国家内,地区代码也可能有不同的长度(例如德国)。我不知道有一个国际图书馆 - 快速搜索没有找到任何东西(虽然这并不意味着一个不存在)。你可能需要在这里自己动手;如果你只需要支持一个国家,这不应该太难。