Android - 电话号码格式化和删除国家/地区代码

Posted

技术标签:

【中文标题】Android - 电话号码格式化和删除国家/地区代码【英文标题】:Android - phone number formatting and removing the country/area code 【发布时间】:2015-11-06 10:54:58 【问题描述】:

我已经构建了一个应用程序,我在其中循环并收集用户的电话联系人,我的目标是然后使用这些号码并查询我的解析数据库并查找包含用户联系人的记录(这将检查是否有用户联系人是我的应用程序的用户,用户的电话号码将在他们注册时保存到我的解析数据库中)。我遇到的问题是,在收集用户联系人号码时,它们会以不同的格式返回,有些是 +447966000000,有些是 07966000000,有些是 07 966000 000000,等等。 我的问题是,将我的号码保存到数据库并从用户联系人中检索它们时格式化我的号码的最佳方法是什么,以便以相同的格式保存和检索所有号码,以便当我对它们进行条件检查时会容易比较吗? 我已经下载了电话号码实用程序库,但我不确定库中的哪些内容可用于执行此类操作。

到目前为止的代码:

 Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        while (phones.moveToNext())
        
            String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            Toast.makeText(getApplicationContext(),name + " " + phoneNumber, Toast.LENGTH_LONG).show();
        
        phones.close();

【问题讨论】:

检查这个:http://***.com/questions/2543938/how-to-split-mobile-number-into-country-code-area-code-and-local-number How to know SMS number and phone number is the same?的可能重复 【参考方案1】:

您可以使用PhoneNumberUtils.compare 比较并检查它们是否相同。如果它们相同则返回true,忽略国家代码等。

例子:

PhoneNumberUtils.compare(context, 1234567890, +911234567890);

返回true

【讨论】:

【参考方案2】:

我已经为印度手机号码格式做了它

   private String getNumber(String moNumber) 
    Pattern special = Pattern.compile ("[!@#$%&*()_+=|<>?\\[\\]~-]");
    if (moNumber.isEmpty()||moNumber.length()<10) 
        MydebugClass.showToast(getContext(), "Please input valid Number");
        return null;
    else if (moNumber.length()>10 && !special.matcher(moNumber).find())
        String[] number=moNumber.split("");
        StringBuilder stringBuilder=new StringBuilder();
        for(int i=moNumber.length();i>moNumber.length()-10;i--)
            stringBuilder.append(number[i]);
        
        String reverse=new StringBuffer(stringBuilder).reverse().toString();
        return reverse;
    else if(moNumber.length()>10&&special.matcher(moNumber).find())
        String numberOnly= moNumber.replaceAll("[^0-9]", "");
        String[] number=numberOnly.split("");
        StringBuilder stringBuilder=new StringBuilder();
        for(int i=moNumber.length();i>moNumber.length()-10;i--)
            stringBuilder.append(number[i]);
        
        String reverse=new StringBuffer(stringBuilder).reverse().toString();
        Log.d("mobilenumberspecial",reverse);
        return reverse;
    
    else 
        return moNumber;
    
    return  null;

【讨论】:

以上是关于Android - 电话号码格式化和删除国家/地区代码的主要内容,如果未能解决你的问题,请参考以下文章

json JSON格式的国家/地区和拨号或电话代码

Android 格式化包含国家代码的国际电话号码字符串

Android:来电时的电话号码格式,确定国家代码?

如何从电话号码中删除“+”和国家代码?

在Paypal智能付款按钮上设置国家/地区电话

有没有办法在 web 的 firebase 电话身份验证中将国家/地区动态分配给 defaultCountry?