EditText输入校验法以及关闭软键盘的正则校验

对于EditText输入的校验限制。使用
InputRule.applyRule(Editetxt, "linkMan");
package com.sgcc.wsgw.publiclibrary.utils;

import android.text.Editable;
import android.text.InputFilter;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.DigitsKeyListener;
import android.text.style.CharacterStyle;
import android.widget.EditText;

public class InputRule {
    private static String USERPASS_RULE = "[^a-zA-Z0-9]";
    public static String QUERYPASS_RULE = "[^a-zA-Z0-9]";
    public static String QUERYPASS_ADDITIONALRECORDING_RULE = "[^a-zA-Z0-9\\*]";
    private static String CERTIFICATEFORUNIFORMSOCIALCREDITCODE_QUERY_RULE = "[^a-zA-Z0-9]";//32位统一社会信用代码
    private static String ADDRESS_RULE = "[^a-zA-Z0-9\u4E00-\u9FA5]";
    private static String LINKMAN_RULE = "[^A-Za-z\u4E00-\u9FA5()()]";
    private static String LINKMAN_ADDITIONALRECORDING_RULE = "[^A-Za-z\u4E00-\u9FA5*()()]";
    private static String ADRES_RULE = "[^a-zA-Z0-9\u4E00-\u9FA5*]";
    private static String REGEX_EMAIL = "[^a-zA-Z0-9\\.@\\*]";
    private static String LOWUSERNAME = "[^a-zA-Z\u4E00-\u9FA5*]";
    // private static String SERVICEMANCARD="[^[\\u4e00-\\u9fa5]{3}[\\d]{1,29}$]";//军人证
    public static String SERVICEMANCARD = "[^[\u4E00-\u9FA5]{3}[\\d]{1,29}$]";//军人证

    public static String SERVICEMANCARD_ADDITIONALRECORDING = "[^[\u4E00-\u9FA5]{3}[\\d]{1,29}$\\*]";//军人证补录加*规则

    public static void applyRule(EditText editText) {
        applyRule(editText, editText.getTag());
    }

    public static void applyRule(final EditText editText, Object tag) {
        if (tag == null || !(tag instanceof String)) {
            return;
        }

        String type = (String) tag;
        switch (type) {
            case "userName":
                setLength(editText, 20);
                editText.setKeyListener(DigitsKeyListener.getInstance("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"));
                editText.setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL);
                break;
            case "phone":
                setLength(editText, 11);
                editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
                editText.setRawInputType(InputType.TYPE_CLASS_PHONE);
                break;
            case "userPass":
                setLength(editText, 20);
                setRule(editText, USERPASS_RULE);
                break;
            case "verifyCode":
                setLength(editText, 6);
                editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
                editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
                break;
            case "queryPass":
                setLength(editText, 12);
                setRule(editText, QUERYPASS_RULE);
                break;
            case "CertificateForUniformSocialCreditCode":
                setLength(editText, 32);
                setRule(editText, CERTIFICATEFORUNIFORMSOCIALCREDITCODE_QUERY_RULE);
                break;
            case "CertificateForUniformSocialCreditCode_AdditionalRecording":
                setLength(editText, 32);
                setRule(editText, QUERYPASS_ADDITIONALRECORDING_RULE);
                break;
            case "markCode":
                setLength(editText, 10);
                editText.setInputType(InputType.TYPE_CLASS_NUMBER);
                break;
            case "nickName":
                setLength(editText, 20);
                break;
            case "address":
                setLength(editText, 120);
                setRule(editText, ADDRESS_RULE);
                break;
            case "linkMan":
                setRule(editText, LINKMAN_RULE);
                break;
            case "linkMan_additionalRecording":
                setRule(editText, LINKMAN_ADDITIONALRECORDING_RULE);
                break;
            case "lowUserName":
                setRule(editText, LOWUSERNAME);
                break;
            case "label":
                setLength(editText, 10);
                break;
            case "editNick":
                setLength(editText, 5);
                setRule(editText, ADDRESS_RULE);
                break;
            case "idCard":
                setLength(editText, 18);
                setRule(editText, QUERYPASS_RULE);
                break;
            case "idCard_additionalrecording":
                setLength(editText, 18);
                setRule(editText, QUERYPASS_ADDITIONALRECORDING_RULE);
                break;
            case "other":
                setLength(editText, 32);
                setRule(editText, QUERYPASS_RULE);
                break;
            case "other_additionalrecording":
                setLength(editText, 32);
                setRule(editText, QUERYPASS_ADDITIONALRECORDING_RULE);
                break;
            case "servicemancard":
                setLength(editText, 32);
                setRule(editText, SERVICEMANCARD);
                break;
            case "servicemancard_additional":
                setLength(editText, 32);
                setRule(editText, SERVICEMANCARD_ADDITIONALRECORDING);
                break;
            case "adres":
                setLength(editText, 100);
                setRule(editText, ADRES_RULE);
                break;
            case "email":
                setLength(editText, 100);
                setRule(editText, REGEX_EMAIL);
                break;
        }
    }

    private static void setLength(EditText editText, int length) {
        editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)});
    }

    public static void setRule(final EditText edit, final String restrict) {
        edit.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

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

            @Override
            public void afterTextChanged(Editable s) {
                if (inputNotComplete(s)) {
                    //某些输入法在输入中文时,会生成临时字符,此时不做处理
                    return;
                }
                String str = s.toString();
                String inputStr = str.replaceAll(restrict, "");
                edit.removeTextChangedListener(this);
                s.replace(0, s.length(), inputStr.trim());
                edit.addTextChangedListener(this);

            }
        });

    }

    /**
     * 通过editable是否包含特定的Span,判断是否在输入临时字符
     */
    public static boolean inputNotComplete(Editable s) {
        CharacterStyle[] styles = s.getSpans(0, s.length(), CharacterStyle.class);
        return styles != null && styles.length > 0;
    }
}
//在键盘收起的时候校验输入内容是否合法
private void checkInputContentOnfocusTime() {
    final String[] switchEditFlag = {"000"};
    KeyboardStateObserver.getKeyboardStateObserver(this).
            setKeyboardVisibilityListener(new KeyboardStateObserver.OnKeyboardVisibilityListener() {
                @Override
                public void onKeyboardShow() {
                    // MyToast.showToast(TransferPersonApplyActivity.this, "键盘弹出");
                }

                @Override
                public void onKeyboardHide() {
                    //MyToast.showToast(TransferPersonApplyActivity.this, "键盘收回");
                    if (switchEditFlag[0].equals("edit1NewPhoneNo")) {
                        edit1NewPhoneNo.clearFocus();
                        edit1NewPhoneNo.requestLayout();
                    } 

                }
            });
   
    edit1NewPhoneNo.setOnFocusChangeListener(new View.OnFocusChangeListener() {        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                switchEditFlag[0] = "edit1NewPhoneNo";
            } else {//!hasFocus
                String newPhoneNo = edit1NewPhoneNo.getRightContent();
                switchEditFlag[0] = "000";
                if (CommonUtil.isEmpty(newPhoneNo)) {
                    return;
                }
                if (CheckInputUtil.checkPhoneNum(newPhoneNo) != null) {
                    MyToast.showToast(context, "请输入正确的手机号码");
                    edit1NewPhoneNo.setRightContent("");
                }
             
            }
        }
    });
}

猜你喜欢

转载自blog.csdn.net/lk2021991/article/details/89456705