Android表单校验器,让你的文本校验清晰化
来源:互联网 发布:低频变压器设计软件 编辑:程序博客网 时间:2024/06/03 21:39
对于一般项目的业务层,注册页的输入框都密密麻麻,对输入文本的检验也千奇百怪,在应对多个文本框文本进行判断时,总是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); }}
具体使用
在build.gradle中添加
compile 'com.yuhoon.validator:validator:v0.3'实例validator
Validator validator = new Validator();
注册控件及验证规则validator.register((EditText) findViewById(R.id.edt_password), new RequiredRule("密码不能为空"), new UniformityRule((EditText) findViewById(R.id.edt_rePassword), "两次密码输入不一致"));validator.register((EditText) findViewById(R.id.edt_rePassword), new RequiredRule("密码不能为空"));
统一处理校验结果
validator.validateAll(new ValidateResultCall() { @Override public void onSuccess() { //TODO 成功 Toast.makeText(MainActivity.this, "检验成功", Toast.LENGTH_SHORT).show(); } @Override public void onFailure(TextView view,String message) { //TODO 失败 view.setText(null); Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); }});如果是单一控件也可以直接调用validate去做校验,返回值为boolean,true为验证通过
if (validator.validate((EditText) findViewById(R.id.edt_password))) { //TODO 成功} else { //TODO 失败}
定义的规则类
正则校验
EmailRule 邮箱校验
IdCardRule 身份证校验(15或18位)
PhoneNumberRule 电话校验
UrlRule URL校验
普通校验
ExactLengthRule 标准长度校验
MaxLengthRule 最大长度校验
MinLengthRule 最小长度校验
RequiredRule 非空校验
UniformityRule 与指定edittext进行文本校验
非校验
- ConfirmationRule 确认提示信息
Demo地址
0 0
- Android表单校验器,让你的文本校验清晰化
- 让Angularjs外面表单忽略对内嵌表单的校验
- Android 表单逻辑校验方案的探讨
- Struts2的表单校验
- struts的文本校验
- javascript 表单校验器
- android 表单校验工具类
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 表单校验
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- ulimit详解
- Android 6.0 屏幕旋转
- springMvc 目标方法执行前改变参数(环绕增强)
- AngularJS中ng-class使用
- Android表单校验器,让你的文本校验清晰化
- C++14返回值自动推导
- SQL 和 Sqlite 常用语句
- c++实验三:定期存款利息计算器
- 自定义菜单
- 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在
- JS判断客户端是否是iOS或者Android手机移动端
- 关于IDEA中项目pom.xml文件中jar报错,以及maven在IDEA中的配置!!!
- c#【学习笔记】接口