Java 处理电话号码格式

Java 处理电话号码格式,java,android,telephony,phone-number,Java,Android,Telephony,Phone Number,我想我在这里面临一个悖论 我想做的是当我接到/打电话时,我有这个号码,所以我需要知道它是否是国际号码,是否是本地号码,等等 问题是: 为了让我知道一个数字是否是国际性的,我需要解析它并检查它的长度,但是,不同国家的长度不同,所以,我应该为每个国家使用解析和识别的方法吗?(在我看来是没有功能的) 为了让我知道它是否是本地号码,我需要区号,所以我必须做同样的事情,解析号码并检查长度,根据区号长度得到第一个号码 很难找到解决这个问题的办法。图书馆提供了很多有用的类,但我认为可以帮助我的那个类,把我带到

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

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

问题是:

  • 为了让我知道一个数字是否是国际性的,我需要解析它并检查它的长度,但是,不同国家的长度不同,所以,我应该为每个国家使用解析和识别的方法吗?(在我看来是没有功能的)
  • 为了让我知道它是否是本地号码,我需要区号,所以我必须做同样的事情,解析号码并检查长度,根据区号长度得到第一个号码 很难找到解决这个问题的办法。图书馆提供了很多有用的类,但我认为可以帮助我的那个类,把我带到了另一个悖论

    方法phoneUtil.parse(number,countryAcronym)返回带有国家代码的数字,但它所做的是,如果我传递带有首字母缩写“US”的数字,它将返回带有国家代码“1”的数字,现在如果我将首字母缩写改为“BR”,它将更改数字并返回“55”,这是巴西的国家代码。所以,不管怎样,我需要基于我得到的数字的国家首字母缩略词

    例:

    上面的代码返回带有美国国家代码的数字,但现在如果我将“US”更改为任何其他国家的首字母缩写,它将返回相同的数字,但带有该国家的国家代码

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

    这真的让我心烦意乱。我需要苏的明智法师给我一些好建议

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

    谢谢


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

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

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


    2) 对于区号解析,没有通用的标准;有些国家不使用区号,即使在一个国家内,区号的长度也可能不同(例如德国)。我不知道有哪家国际图书馆可以提供这方面的信息——快速搜索也找不到任何信息(尽管这并不意味着没有)。你可能需要在这里玩你自己的游戏;如果你只需要支持一个国家,这应该不会太难。

    是的。但问题是,我必须支持几乎所有国家。这将是一个艰难的过程,需要大量的研究和思考才能得出一个简单而明智的结论。一个好的方法是获取国家的数字,唯一的方法是解析数字吗?不管怎样,谢谢。非常感谢。您需要检查电话号码字符串是否以+开头,或者您所在国家的国际电话号码前缀是否合适-如果没有,则为全国电话号码。手机知道要发送什么数字来代替+符号,但我不知道如何从您的代码中检索它。
    numberReturned = phoneUtil.parse(phoneNumber, "US");
    phoneUtil.format(numberReturned, PhoneNumberFormat.INTERNATIONAL);