【问题标题】:Convert an international phone number into a national number将国际电话号码转换为国内号码
【发布时间】:2021-12-29 13:35:29
【问题描述】:

我正在使用libphonenumber 谷歌图书馆将国际电话号码转换为国内号码。

var phoneNumberUtil = PhoneNumberUtil.getInstance();
var phoneNumber = phoneNumberUtil.parse(internationalPhoneNumber, null);
var formattedPhoneNumber = phoneNumberUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL).replaceAll("\\s", "");

internationalPhoneNumber 的示例是“+919744012345”

我期待的formattedPhoneNumber 是“9744012345”(See the Mobile telephone numbering in India),但相反,我得到的是“09744012345”,前导零。

如何正确转换国际电话号码?

【问题讨论】:

  • 在大多数国家/地区,前导“0”是国家电话号码的一部分。猜猜,你正在使用的库正是这样做的。
  • "在书面电话号码中,经常会看到区号以“0”开头。“0”是印度用于拨打国内长途电话的国家直拨 (NDD) 代码. 如果您正在拨打国际电话并且有一个以“0”开头的号码,则需要将其删除。” - 国际号码没有 0(在 +91 和 97 之间),您的本地号码有前导 0,所以我觉得没问题。但是,如果您愿意,您也可以从印度国家号码中删除前导 0。

标签: java phone-number libphonenumber


【解决方案1】:

恕我直言,您必须设置正确的数字格式。 看看PhoneNumberUtil.PhoneNumberFormat: INTERNATIONAL 和 NATIONAL 格式与 ITU-T E123 建议书中的定义一致。

详细信息在Javadoc of class PhoneNumberUtil

【讨论】:

    【解决方案2】:

    在许多国家/地区,您应该在电话号码前写 0,我认为图书馆会为您提供给定国家/地区使用的正确格式。

    如果您选择删除所有电话号码的前 0,您只需将前 0 替换为空白“”:

    var phoneNumberUtil = PhoneNumberUtil.getInstance();
    var phoneNumber = phoneNumberUtil.parse(internationalPhoneNumber, null);
    var formattedPhoneNumber = phoneNumberUtil.format(phoneNumber, NATIONAL).replaceAll("\\s", "");
    if(formattedPhoneNumber.startsWith("0"))
             formattedPhoneNumber=formattedPhoneNumber.substring(1);
    

    【讨论】:

      猜你喜欢
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2011-01-16
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多