Android - phone 数字格式和删除 country/area 代码
Android - phone number formatting and removing the country/area code
我构建了一个应用程序,我在其中循环收集用户 phone 联系人,我的目标是然后使用这些数字并查询我的解析数据库并查找包含用户联系人的记录(这将是检查是否有任何用户联系人是我的应用程序的用户,用户 phone 号码将在他们注册时保存到我的解析数据库中)。我遇到的问题是,在收集用户联系人号码时,他们以不同的格式返回,有些是 +447966000000,有些是 07966000000,有些是 07 966000 000000,等等。
我的问题是,在将我的号码保存到数据库并从用户联系人中检索它们时格式化我的号码的最佳方式是什么,以便所有号码都以相同的格式保存和检索,以便当我对它们进行条件检查时会容易比较吗?
我已经下载了 phone Number Utils 库,但我不确定库中的什么可以用来做这样的事情。
目前代码:
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();
印度手机号码格式我已经做到了
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;
}
您可以使用 PhoneNumberUtils.compare 比较并检查它们是否相同,或者 not.It returns 如果它们相同则忽略国家代码等
示例:
PhoneNumberUtils.compare(context, 1234567890, +911234567890);
returns true
我构建了一个应用程序,我在其中循环收集用户 phone 联系人,我的目标是然后使用这些数字并查询我的解析数据库并查找包含用户联系人的记录(这将是检查是否有任何用户联系人是我的应用程序的用户,用户 phone 号码将在他们注册时保存到我的解析数据库中)。我遇到的问题是,在收集用户联系人号码时,他们以不同的格式返回,有些是 +447966000000,有些是 07966000000,有些是 07 966000 000000,等等。
我的问题是,在将我的号码保存到数据库并从用户联系人中检索它们时格式化我的号码的最佳方式是什么,以便所有号码都以相同的格式保存和检索,以便当我对它们进行条件检查时会容易比较吗?
我已经下载了 phone Number Utils 库,但我不确定库中的什么可以用来做这样的事情。
目前代码:
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();
印度手机号码格式我已经做到了
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;
}
您可以使用 PhoneNumberUtils.compare 比较并检查它们是否相同,或者 not.It returns 如果它们相同则忽略国家代码等
示例:
PhoneNumberUtils.compare(context, 1234567890, +911234567890);
returns true