2

如何使用 Google 的 libphone 号码https://github.com/googlei18n/libphonenumber来查看电话号码是加拿大还是美国的电话号码,因为它们共享相同的国家代码?

例如:+1415-555-0123 是美国、旧金山 +1647-555-0123 是加拿大、多伦多

只需提供电话号码,我就需要获取国家名称。

当我尝试以下类似的操作时,它返回“true”,而我的期望是它应该返回 false,因为电话号码不是美国号码而是加拿大号码。

 PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
 boolean isPossible = phoneUtil.isPossibleNumber("+16475550123", "US");
4

2 回答 2

3

我意识到这是一个两步的过程:

第1步:(首先检查它是否是一个可能的数字)

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
boolean isPossible = phoneUtil.isPossibleNumber("+16475550123", "US");

第2步:(然后检查它是否适用于地区)

Phonenumber.PhoneNumber number = phoneUtil.parse("+16475550123", "US");
 isValid = phoneUtil.isValidNumberForRegion(number, "US");

//isValid 为假,因为 647 不是美国区号。

我们可以有这样的东西:

String countries[] = {"US", "CA"};
String phoneNumber = "+13101234567";

for (String c : countries) {
            boolean isValid = phoneUtil.isPossibleNumber(phoneNumber, c);

            if (isValid) {
                try {
                    Phonenumber.PhoneNumber number = phoneUtil.parse(phoneNumber, c);
                    isValid = phoneUtil.isValidNumberForRegion(number, c);
                    if(isValid) {
                       System.out.println("Country is " + c);
                    }
                }catch(Exception e) {}
            }
        }
于 2015-12-23T17:47:00.630 回答
1

您可能正在寻找PhoneNumberUtil.isValidNumberForRegion(). 从其文档中,它

测试电话号码在特定区域是否有效。请注意,这并不能验证数字是否实际在使用中,仅通过查看数字本身是无法判断的。如果国家/地区呼叫代码与该地区的国家/地区呼叫代码不同,则立即以 false 退出。在此之后,检查该区域的特定编号模式规则。例如,这对于确定特定号码是否对加拿大有效,而不仅仅是一个有效的 NANPA 号码很有用。

于 2015-12-22T16:41:48.013 回答