如何让libphonenumber格式化法语电话号码?

时间:2018-04-13 01:13:55

标签: android libphonenumber android-textwatcher

我正在查看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(可编辑的)

中包含以下代码
                    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;

1 个答案:

答案 0 :(得分:1)

我可能错了,但根据维基,法语数字的数字格式以“0”开头。因此,您的测试输入对LibPhoneNumber无效。 https://en.wikipedia.org/wiki/Telephone_numbers_in_France

enter image description here

该计划使用十位数的封闭编号方案,前两位数字表示该区域:

01Île-de-France
02法国西北部 03法国东北部 04法国东南部 05法国西南部 06和07手机服务
08免费电话(numérovert)和共享成本服务 09非地理号码(由IP语音服务使用,以前为087号码)

如果在测试值前添加“0”,则似乎正确格式化。