对于一般项目的业务层,注册页的输入框都密密麻麻,对输入文本的检验也千奇百怪,在应对多个文本框文本进行判断时,总是if、else不仅让我们的代码写的过长,而且有时又会造成逻辑混乱,这时我们移动端可以采用表单的模式把当前模块中的所有文本框放入一个表单校验器中,统一进行验证处理。LZ封装了一个表单验证器,支持Textview及其子类。
LZ定义了一个规则接口,所有子规则都实现了这个Rule,定义了两个通用方法
public interface Rule { boolean validate(String value); String getErrorMessage(); } 来看下具体实现类 ,最基本的非空判断,validate做校验处理,getErrorMessage获取错误信息 : public class RequiredRule implements Rule { private String message; public RequiredRule(String message) { this.message = message; } @Override public boolean validate(String value) { return value != null && !value.isEmpty(); } @Override public String getErrorMessage() { return message; } } 封装的验证器,LZ把view和校验规则放在map里,value是Rule类型的数组,也就是说一个view可以对应多个规则,可以对操作的文本框进行多种类型的判断 public class Validator { public Map<TextView, List<Rule>> validations = new LinkedHashMap<TextView, List<Rule>>(); public void register(TextView textView, Rule... rules) { validations.put(textView, Arrays.asList(rules)); } public void unregister(TextView textView) { validations.remove(textView); } public void validateAll(ValidateResultCall resultCall) { boolean isTure = true; for (TextView key : validations.keySet()) { for (Rule rule : validations.get(key)) { if (!rule.validate(String.valueOf(key.getText()))) { key.requestFocus(); resultCall.onFailure(key, rule.getErrorMessage()); isTure = false; return; } } } if (isTure) resultCall.onSuccess(); } public boolean validate(EditText editText) { List<Rule> rules = validations.get(editText); if (rules == null) { return true; } else { for (Rule rule : rules) { boolean validate = rule.validate(String.valueOf(editText.getText())); if (!validate) { return false; } } } return true; } }我又封装了正则的base类
public class RegexRule implements Rule { private String regex; private String message; public RegexRule(String regex, String message) { this.regex = regex; this.message = message; } @Override public boolean validate(String value) { return Pattern.compile(regex).matcher(value).matches(); } @Override public String getErrorMessage() { return message; } } 用来做邮箱校验的RegexRule的子类 public class EmailRule extends RegexRule{ public EmailRule(String message) { super("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", message); } }EmailRule 邮箱校验
IdCardRule 身份证校验(15或18位)
PhoneNumberRule 电话校验
UrlRule URL校验
ExactLengthRule 标准长度校验
MaxLengthRule 最大长度校验
MinLengthRule 最小长度校验
RequiredRule 非空校验
UniformityRule 与指定edittext进行文本校验
