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

Posted

技术标签:

【中文标题】如何将字符串号码格式化为美国电话号码格式【英文标题】:How to format a String number into a US phone number format 【发布时间】:2017-10-17 08:00:03 【问题描述】:

我有一个 EditText,我想将在 EditText 中输入的任何数字格式化为美国电话号码格式,例如 1(123)123-123 所以如果用户自动输入数字 1 (将被添加,这也应该适用于删除。我能够添加一个文本观察器并设置逻辑,但在处理删除案例时我搞砸了。

这是我格式化第一个括号的代码逻辑,但如果我们删除括号,它将不起作用

editText.addTextChangedListener(new TextWatcher() 
        public int after;
        public int before;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) 
            before = count;
        

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) 
            after = count;

        

        @Override
        public void afterTextChanged(Editable s) 
            editText.removeTextChangedListener(this);
            if (before < after) 
                if (s.length() == 4 && s.charAt(0) == '1') 
                    String formated = "1 (" + s.toString().substring(1, 4) + ")";
                    editText.setText(formated);
                    editText.setSelection(editText.getText().toString().length());
                
            

            editText.addTextChangedListener(this);
        
    );

【问题讨论】:

这里的一个选项是使用三个不同的框来输入区号、交换机和电话号码。 你在这里似乎很新,所以在这里,请提供一些你已经在使用的代码。 ***.com/questions/5114762/… @Qohelet 我已经添加了代码,请检查一下,如果你能帮助我,请告诉我 【参考方案1】:

我不会使用此功能来检查文本是否已更改:

if (before < after)

假设有人使用复制粘贴替换电话号码或在替换之前标记一位数字。 如果!oldtext.equals(s.toString()) 继续,最好将您的文本保存在某处。

假设 editText 是您的文本框。代码也未经测试,使用风险自负。

    public void afterTextChanged(Editable s) 
                editText.removeTextChangedListener(this);
                if (before < after) 
                    if (s.length() == 4 && s.charAt(0) == '1') 
                        long phoneFmt = Long.parseLong(s.toString().replaceAll("[^\\d]", ""),10);

DecimalFormat phoneDecimalFmt = new DecimalFormat("0000000000");
String phoneRawString= phoneDecimalFmt.format(phoneFmt);

java.text.MessageFormat phoneMsgFmt=new java.text.MessageFormat("(0)-1-2");
    //suposing a grouping of 3-3-4
String[] phoneNumArr=phoneRawString.substring(0, 3),
          phoneRawString.substring(3,6),
          phoneRawString.substring(6);


                        editText.setText(phoneMsgFmt.format(phoneNumArr));
                        editText.setSelection(editText.getText().toString().length());
                    
                

                editText.addTextChangedListener(this);
            

【讨论】:

以上是关于如何将字符串号码格式化为美国电话号码格式的主要内容,如果未能解决你的问题,请参考以下文章

以美国电话号码格式格式化 UILabel 内容

如何使用 PhoneNumberUtils 库将电话号码格式化为没有国家前缀的国家格式?

Pebble 模板电话号码格式

xcode swift - 将文本格式化为电话号码[重复]

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

ios中的电话号码格式掩码