2011-10-10 100 views
1

我想我在这里面临一个悖论。处理电话号码格式

我想要做的,当我接收/拨打电话,我有多少,所以我需要知道,如果它的国际电话号码,如果一个本地号码等

的问题是是:

  1. 对于我知道,如果一个号码是国际性的,我需要解析,并检查它的长度,但长度不同,从国家到国家,所以,我应该做的分析和识别的方法各国? (在我看来不起作用);
  2. 对于我来说,如果它是一个本地号码,我需要区号,所以我必须做同样的事情,解析号码并检查长度,根据区号长度得到第一个号码;

它很难找到解决方案。图书馆libphonenumber提供了很多有用的类,但我认为可以帮助我的那个类,把我带到另一个悖论。

phoneUtil.parse(number,countryAcronym)方法返回带有国家代码的号码,但是它的功能是,如果我通过带有首字母缩写词“US”的号码返回国家代码为'1'的号码,现在如果我将首字母缩写词改为“BR”,它会更改数字并返回巴西的国家代码“55”。所以,无论如何,我需要根据我得到的数字来确定国家的首字母缩略词。

EX:

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

上面的代码,返回数字与美国的国家代码,但现在如果我改变“美国的”任何其他国家的首字母缩写,将返回相同的号码,但与国家代码那个国家。

我知道这LIB不应该猜测哪个国家的数量是(这将是真棒!),但多数民众赞成我需要什么。

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

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

谢谢。


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

回答

0

1)phoneUtil.parse第二个参数必须目前在你是国相匹配- 如果收到的电话号码,不包括国际前缀,它的使用。这就是为什么当你改变参数时你会得到不同的结果:你传递的电话号码不包含这样的前缀,所以它只是使用你所说的。

任何分析解决方案套件,以确定该电话号码是国际的还是国内将需要意识到这一点:根据来源,甚至一个国家的数量可能与国际拨号前缀(通常抽象为+来表示,因为它在国家之间有所不同,但这不能保证)。

2)对于区域码解析,没有通用的标准;一些国家不使用它们,甚至在一个国家内,区号可能有不同的长度(例如德国)。我不知道这个国际图书馆 - 快速搜索没有发现任何东西(尽管这并不意味着不存在)。你可能需要在这里推出自己的;如果你只需要支持一个国家,这应该不会太难。

+0

是的。但问题是,我必须支持几乎所有国家。这将是很难,很多研究和思考得出一个简单而明智的结论。一个好的方法是让国家的数字是唯一的方法来解析这个数字呢?不管怎么说,多谢拉。 – rogcg

+0

非常,是的。您需要检查电话号码字符串是以“+”开头还是以任何适合您所在国家/地区的国际电话为前缀的前缀 - 如果不在那里,那么它是全国性的。电话知道要发送哪些数字来代替+号,但我不知道如何从代码中检索数字。 –