对于EditText输入的校验限制。使用
InputRule.applyRule(Editetxt, "linkMan");
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(""); } } } }); }