如何在国家/地区号码前加零?

时间:2018-09-05 13:28:40

标签: java formatting internationalization phone-number libphonenumber

我正在使用预定义的电话格式来格式化国家/地区电话号码,但返回了国家/地区有效号码。不以0为前缀。 例如:

美国电话号码

PhoneNumber = +16175551212   (national number is 6175551212)
pf = new PhoneFormat("(XXX) XX XXXXX", dialingCodeUS);
PhoneNumberUtil.formatByPattern(PhoneNumber, PhoneNumberFormat.NATIONAL, pf)
result: (617) 55 51212      GOOD!

IL(以色列)电话#

PhoneNumber = +972545551212   (national number is 0545551212)
pf = new PhoneFormat("XXX-XXX XXXX", dialingCodeUS);
PhoneNumberUtil.formatByPattern(PhoneNumber, PhoneNumberFormat.NATIONAL, pf)

result: 545551212        BAD!

Expected it to be: 054-555 1212

我不能使用其他方法来做到这一点,因为该方法(formatByPattern)接受预定义的PhoneFormats

来自javadoc:PhoneNumberUtil.formatByPattern

  

public String formatByPattern(Phonenumber.PhoneNumber number,
                     PhoneNumberUtil.PhoneNumberFormat numberFormat,
                     List<Phonemetadata.NumberFormat> userDefinedFormats)
  

使用客户端定义的格式设置规则以指定的格式设置电话号码。请注意,如果电话号码有拨打国家/地区的电话   零代码或其他无效的国家/地区呼叫代码,我们无法   算出是否应该使用国家前缀   应用,或如何格式化扩展名,因此我们返回国家   有效数字,未应用格式。参数:number-   要格式化的电话号码numberFormat-电话的格式   数字应格式化为userDefinedFormats-格式化规则   客户指定的返回:格式化的电话号码

演示:https://libphonenumber.appspot.com/

所以我当前的问题是找到一种方法来在 优雅的方式。

有没有一种方法可以使用预定义的“电话”格式来格式化数字,但又可以像预期的那样以零开头?

1 个答案:

答案 0 :(得分:0)

您是否打算在数字末尾完全省略破折号?否则,我的看法(从未使用过此软件包)是要执行以下操作,以便以民族方式显示以色列号码:

    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();

    String pn ="+972545551212";

    Phonenumber.PhoneNumber number = null;
    try {
        number = phoneUtil.parse(pn, "IL");
        System.out.println(phoneUtil.format(number, PhoneNumberUtil.PhoneNumberFormat.NATIONAL));
    } catch (NumberParseException e) {
        e.printStackTrace();
    }

这将产生:

054-555-1212