如何获取 libphonenumber 来格式化法语 phone 数字?
How to get libphonenumber to format French phone numbers?
我正在研究 libphonenumber 库 (https://github.com/googlei18n/libphonenumber),但我只能让它在 "US" 和 "BR" 地区工作。如何让它在 "FR" 地区工作?我要找的格式是 1 41 02 25 00.
我可以用我自己的代码得到这种格式
@Override
public void afterTextChanged(Editable s) {
// phone digits without formatting
phone = s.toString().replaceAll("[^\d]", "");
if (phone.length() == 1) {
edtPhoneNumber.setText(s.toString().concat(" "));
// move cursor to original position relative to the end of the string
edtPhoneNumber.setSelection(edtPhoneNumber.getText().length() - cursorPos);
} else {
if (pairings.length() >= 2) {
pairings = "";
}
pairings = pairings.concat(phone.substring((phone.length()-1)));
if (pairings.length() >= 2) {
if (phone.length() < 9) {
edtPhoneNumber.setText(s.toString().concat(" "));
} else {
edtPhoneNumber.setText(s.toString());
}
} else {
edtPhoneNumber.setText(s.toString());
}
// move cursor to original position relative to the end of the string
edtPhoneNumber.setSelection(edtPhoneNumber.getText().length() - cursorPos);
}
}
我的库实现如下。用感兴趣的区域代码实例化后,
AsYouTypeFormatter aytf = PhoneNumberUtil.getInstance().getAsYouTypeFormatter("FR")
然后我在 afterTextChanged(Editable s)
中有以下代码
if(phone.length() > 0){
for(int i = 0; i < phone.length(); i++){
formattedPhoneNumber = aytf.inputDigit(phone.charAt(i));
}
//The formatted output shows properly in this EditText but not when I try to put it back into the original one (phoneNumberText)
edtPhoneNumber.setText(formattedPhoneNumber);
edtPhoneNumber.setSelection(edtPhoneNumber.getText().length() - cursorPos);
aytf.clear();
}
formattedPhoneNumber = null;
isPhoneFormatting = false;
我可能错了,但根据 wiki,法语数字的数字格式以“0”开头。因此您的测试输入对 LibPhoneNumber 无效。 https://en.wikipedia.org/wiki/Telephone_numbers_in_France
该计划采用十位封闭编号方案,其中前两位数字表示面积:
01 法兰西岛
02 法国西北部
03 法国东北部
04 法国东南部
05 法国西南部
06 和 07 移动 phone 服务
08 免费phone (numéro vert) 和共享费用服务。
09 非地理号码(用于 IP 语音服务,以前是 087 号码)
如果你在你的测试值前面加上“0”,它的格式似乎是正确的。
我正在研究 libphonenumber 库 (https://github.com/googlei18n/libphonenumber),但我只能让它在 "US" 和 "BR" 地区工作。如何让它在 "FR" 地区工作?我要找的格式是 1 41 02 25 00.
我可以用我自己的代码得到这种格式
@Override
public void afterTextChanged(Editable s) {
// phone digits without formatting
phone = s.toString().replaceAll("[^\d]", "");
if (phone.length() == 1) {
edtPhoneNumber.setText(s.toString().concat(" "));
// move cursor to original position relative to the end of the string
edtPhoneNumber.setSelection(edtPhoneNumber.getText().length() - cursorPos);
} else {
if (pairings.length() >= 2) {
pairings = "";
}
pairings = pairings.concat(phone.substring((phone.length()-1)));
if (pairings.length() >= 2) {
if (phone.length() < 9) {
edtPhoneNumber.setText(s.toString().concat(" "));
} else {
edtPhoneNumber.setText(s.toString());
}
} else {
edtPhoneNumber.setText(s.toString());
}
// move cursor to original position relative to the end of the string
edtPhoneNumber.setSelection(edtPhoneNumber.getText().length() - cursorPos);
}
}
我的库实现如下。用感兴趣的区域代码实例化后,
AsYouTypeFormatter aytf = PhoneNumberUtil.getInstance().getAsYouTypeFormatter("FR")
然后我在 afterTextChanged(Editable s)
中有以下代码 if(phone.length() > 0){
for(int i = 0; i < phone.length(); i++){
formattedPhoneNumber = aytf.inputDigit(phone.charAt(i));
}
//The formatted output shows properly in this EditText but not when I try to put it back into the original one (phoneNumberText)
edtPhoneNumber.setText(formattedPhoneNumber);
edtPhoneNumber.setSelection(edtPhoneNumber.getText().length() - cursorPos);
aytf.clear();
}
formattedPhoneNumber = null;
isPhoneFormatting = false;
我可能错了,但根据 wiki,法语数字的数字格式以“0”开头。因此您的测试输入对 LibPhoneNumber 无效。 https://en.wikipedia.org/wiki/Telephone_numbers_in_France
该计划采用十位封闭编号方案,其中前两位数字表示面积:
01 法兰西岛
02 法国西北部
03 法国东北部
04 法国东南部
05 法国西南部
06 和 07 移动 phone 服务
08 免费phone (numéro vert) 和共享费用服务。
09 非地理号码(用于 IP 语音服务,以前是 087 号码)
如果你在你的测试值前面加上“0”,它的格式似乎是正确的。