手机号输入实时验证



import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

/**
 * @author by malei on 2017/12/19.
 * 手机号实时验证
 */

public class PhoneFormatUtils implements TextWatcher {
    private EditText numberEditText;
    /**
     * 字符串编辑前长度
     */
    int beforeLen = 0;
    /**
     * 字符串编辑后长度
     */
    int afterLen = 0;


    public PhoneFormatUtils(EditText numberEditText) {
        this.numberEditText = numberEditText;
        numberEditText.addTextChangedListener(this);
        beforeString = numberEditText.getText().toString();
    }


    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }


    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
                                  int after) {
        beforeLen = s.length();
    }


    private boolean isChange = true;


    @Override
    public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method
        if (!isChange) {
            isChange = true;
            return;
        }
        String contents = numberEditText.getText().toString();
        afterLen = contents.length();
        if (afterLen == 0)
            return;
//        contents = contents.replace(" ", "");
        if (beforeLen > afterLen) {
            contents = subStringFormat(contents);
        } else if ((beforeLen < afterLen)) {
            contents = addStringFormat(contents);
        }
        if (!isChange) {
            numberEditText.setText(contents);
            if (contents.length() >= 1)
                numberEditText.setSelection(contents.length());
        }
    }


    /**
     * 添加字符格式化
     *
     * @param contents
     * @return
     */
    private String addStringFormat(String contents) {
        // TODO Auto-generated method stub
        int length = contents.length();
        isChange = false;
        if (length == 1) {
            if (!contents.startsWith("1")) {
                contents = "";
                return contents;
            }
            return contents;
        }
        if (!contents.startsWith("1")) {
            contents = contents.substring(1);
            return contents;
        }
        if (!(contents.startsWith("13") || contents.startsWith("15") || contents
                .startsWith("18"))) {
            if (length > 2) {
                contents = "1" + contents.substring(2);
            } else {
                contents = "1";
            }
            return contents;
        }
        if (length > 11) {
            contents = contents.substring(0, 11);
        }
        if (length > 3) {
            contents = contents.substring(0, 3)  + contents.substring(3);
        }
        if (length > 7) {
            contents = contents.substring(0, 8) + contents.substring(8);
        }
        beforeString = contents;
        return contents;
    }


    /**
     * 记录删除字符之前字符串内容,如若删除后格式不符进行还原
     */
    private String beforeString = "";


    /**
     * 删除字符格式化
     *
     * @param contents
     * @return
     */
    private String subStringFormat(String contents) {
        // TODO Auto-generated method stub
        int length = contents.length();
        isChange = false;
        if (length == 0) {
            return contents;
        }
        if (length == 1) {
            if (contents.startsWith("1"))
                return contents;
            else
                return beforeString;
        }
        if (length >= 2) {
            if (!(contents.startsWith("13") || contents.startsWith("15") || contents
                    .startsWith("18"))) {
                return beforeString;
            }
        }
        if (length > 3) {
            contents = contents.substring(0, 3) +  contents.substring(3);
        }
        if (length > 7) {
            contents = contents.substring(0, 8) +  contents.substring(8);
        }
        beforeString = contents;
        return contents;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值