获取美国格式的用户电话号码

Posted

技术标签:

【中文标题】获取美国格式的用户电话号码【英文标题】:Get user phone number in USA format 【发布时间】:2021-09-18 21:45:11 【问题描述】:

我想以这种格式获取电话号码X(XXX)XXX-XXX,当我用 Google 搜索时,我找到了PhoneNumberUtils.formatNumber(),但它以这种格式提供了X-XXX-XXX-XXX 的号码,所以我如何才能从X(XXX)XXX-XXX 中获取号码。

代码

holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()));

【问题讨论】:

【参考方案1】:

PhoneNumberUtils.formatNumber 将返回 (XXX)XXX-XXX 如果您传递本地号码和 X-XXX-XXX-XXX 国际号码,在您的情况下,您有 2 个解决方案:

    删除国家代码然后解析电话号码

         String phoneNumber = "+1-202-000-0000"; 
         String code  = result.substring(0,3);
         String localNumber = result.replace(code,""); //202-555-0196
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
             Log.i("result",code.replace("-","")  + PhoneNumberUtils.formatNumber(localNumber , "US"));
          else 
             Log.i("result",code.replace("-","") + PhoneNumberUtils.formatNumber(localNumber));
         
    

结果:+1(202) 000-0000

    使用此库 google/libphonenumber 来格式化国际电话号码。
private String getFormattedNumber(String phoneNumber) 
    
    PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
    
    Phonemetadata.NumberFormat numberFormat = new Phonemetadata.NumberFormat();
    
    numberFormat.pattern = "(\\d3)(\\d3)(\\d4)";
    
    numberFormat.format = "($1) $2-$3";
    
    List<Phonemetadata.NumberFormat> newNumberFormats = new ArrayList<>();
    
    newNumberFormats.add(numberFormat);
    
    Phonenumber.PhoneNumber phoneNumberPN = null;
    
    try 
        phoneNumberPN = phoneNumberUtil.parse(phoneNumber, Locale.US.getCountry());
        phoneNumber = phoneNumberUtil.formatByPattern(phoneNumberPN, PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL, newNumberFormats);
        
     catch (NumberParseException e) 
        e.printStackTrace();
    
    
    return phoneNumber;


getFormattedNumber("+12020000000");

结果:+1(202) 000-0000

【讨论】:

【参考方案2】:
holder.tv_vehicle.setText("Phone #: " + PhoneNumberUtils.formatNumber(data.getUserPhone()).replaceFirst("-", "(").replaceFirst("-", ")"));

您可以使用 replaceFirst() 插入 ( then ) 并转换它。我在这里写了一些应该可以工作的糟糕代码。如果我在自己的程序中执行此操作,我会将其制成一个执行此操作并返回更新字符串的函数。

【讨论】:

这有点磨损,如果你要替换这么多,为什么还要首先使用 PhoneNumberUtils.formatNumber 这段代码运行良好但@DennisVA 是对的,那么PhoneNumberUtils.formatNumber 有什么用? PhoneNumberUtils 可以为拨号器格式化,它也可以用于随机输入电话号码并将其转换为基本输入,以便您可以随意编辑它。如果您以标准方式获取所有数字输入,并且没有将它们放入拨号器,那么可能没有理由使用它。 @DriversSea 有什么干净的方法可以代替replaceFirst("-", "(").replaceFirst("-", ")")

以上是关于获取美国格式的用户电话号码的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串号码格式化为美国电话号码格式

以美国格式写入多个电话号码逗号分隔

用于验证美国电话号码格式的 RegEx

php 格式化美国电话号码

格式化美国电话号码

jQuery代码段,用于在重新键入号码时将其转换为美国电话号码格式