【验证工具类-ValidateUtil-java】
对于前端穿过来的值要做验证处理,但市面上已经存在很多验证框架了。这里作为自己实现得思路和整理,有需要特别验证得可以自己实现自己想要得。
实现一个工具类
/*** @author shezuoqiang* @date 2022年10月20日 16:15*/
public class ValidateUtil {/*** 验证工具类* @param nameKey 需要抛出错误的中文信息* @param value 需要验证的值* @param vis 验证条件* @return*/public static void valid(String nameKey, Object value, ValidateItem... vis){for(ValidateItem valid:vis){ValidateItem.ValidType vt=valid.valid(value);if(vt!=null){if(vt==ValidateItem.ValidType.range){String[] params=valid.getParameter().split("-");throw new ValidateException(nameKey, ValidateItem.ValidType.range.toString(),params);}else if(vt==ValidateItem.ValidType.notnull){throw new ValidateException(nameKey, ValidateItem.ValidType.notnull.toString(),null);}else if(vt==ValidateItem.ValidType.date){throw new ValidateException(nameKey, ValidateItem.ValidType.date.toString(),null);}else {throw new ValidateException(nameKey, ValidateItem.ValidType.reg.toString(),null);}}}}
}
ValidateItem 实现
import org.apache.commons.lang3.StringUtils;import java.text.SimpleDateFormat;
import java.util.Date;
/*** @author shezuoqiang* @date 2022年10月20日 17:17*/
public class ValidateItem {public enum ValidType {notnull, //非空验证range, //区间reg, //正则email, //邮箱mobile, //手机date //日期};public enum DataType{string, //字符串num, //整数date //日期};/*** 验证类型*/private ValidType validType;/*** 数据类型*/private DataType dataType;/*** 验证参数* notnull时,此值为空* range时,此值为最大最小范围如 10-20* reg时,此值为正则表达式*/private String parameter;public ValidateItem(ValidType vt){validType=vt;}public ValidateItem(ValidType vt,String parameter){validType=vt;this.parameter=parameter;}public String getParameter() {return parameter;}public void setParameter(String parameter) {this.parameter = parameter;}/*** 查找数据类型* @param value*/private DataType findDataType(Object value){if(value instanceof Number){dataType=DataType.num;}else if(value instanceof Date){dataType=DataType.date;}else if(value instanceof String){dataType=DataType.string;}return dataType;}private boolean validDate(Object value){String date=(String)value;try{SimpleDateFormat sdf=new SimpleDateFormat(parameter);sdf.parse(date);}catch(Exception e){return false;}return true;}private boolean validNull(Object value){if(value==null){return false;}else if(dataType==DataType.string){String str=(String)value;if(StringUtils.isBlank(str))return false;}return true;}private boolean validRange(Object value){String[] params=parameter.split("-");if(dataType==DataType.num){Number num=(Number)value;if(num.longValue()<Long.parseLong(params[0])){return false;}else if(num.longValue()>Long.parseLong(params[1])){return false;}}else if(dataType==DataType.string){String str=(String)value;if(StringUtils.isNotBlank(str)&&str.length()<Long.parseLong(params[0])){return false;}else if(StringUtils.isNotBlank(str)&&str.length()>Long.parseLong(params[1])){return false;}}return true;}private boolean validReg(Object value){if(dataType==DataType.string){String str=(String)value;if(StringUtils.isNotBlank(str)&&!str.matches(parameter))return false;}return true;}private boolean validEmail(Object value){if(dataType==DataType.string){String str=(String)value;if(StringUtils.isNotBlank(str)&&!str.matches(RegulareExpUtils.EMAIL_REG))return false;}return true;}private boolean validMobile(Object value){if(dataType==DataType.string){String str=(String)value;if(StringUtils.isNotBlank(str)&&!str.matches(RegulareExpUtils.MOBILE_REG))return false;}return true;}/*** 验证数据* @param value* @return*/public ValidType valid(Object value){findDataType(value);if(validType==ValidType.notnull&&!validNull(value)){return ValidType.notnull;}else if(validType==ValidType.range&&!validRange(value)){return ValidType.range;}else if(validType==ValidType.reg&&!validReg(value)){return ValidType.reg;}else if(validType==ValidType.email&&!validEmail(value)){return ValidType.reg;}else if(validType==ValidType.mobile&&!validMobile(value)){return ValidType.reg;}else if(validType==ValidType.date&&!validDate(value)){return ValidType.date;}return null;}
}
直接在ValidateItem 中的枚举中 写出自己想要的判断类型 在 valid 判断响应类型获取相应的实现即可
main方法调用
public static void main(String[] args) {ValidateUtil.valid("月度个人完成率必须数字;","10",new ValidateItem(ValidateItem.ValidType.notnull),new ValidateItem(ValidateItem.ValidType.reg,"[+-]?[0-9]+(\\.[0-9]{1,4})?"));}
想多个验证就在后面多new几个验证方法。
【验证工具类-ValidateUtil-java】相关推荐
- java sm3国密算法加密、验证工具类
java sm3国密算法加密.验证工具类 说明 maven依赖 完整代码 测试 说明 由于本人并不专于算法和密码学,所以如果发现工具类存在问题或者可优化地方,欢迎评论处提出. 工具类也可以直接使用封装 ...
- Android 身份证、车牌号验证工具类
/*** 正在表达式验证工具类(验证身份证.车牌号等)* * @author chenlin* */ public class ValidateUtil {/*** 验证str是否为正确的身份证格式* ...
- 苹果IAP内购验证工具类
苹果内购 java验证类 package com.utils.ios; import lombok.extern.slf4j.Slf4j;import javax.net.ssl.*; import ...
- UrlUtils工具类,Java URL工具类,Java URL链接工具类
UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...
- [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...
- Math数学工具类在java中如何使用?
Math数学工具类在java中如何使用? 一.Math数学工具类是什么? 在处理业务的时候,经常遇到一些有关数学方面的计算,特别是做测绘和监测业务时,显得出现的频率及其多, JDK提供了一个Math类 ...
- 身份证、护照、军官证、户口本验证工具类
身份证.护照.军官证.户口本验证工具类 public class CertificateValidUtils {/*** 中国公民身份证号码最小长度.*/public static final int ...
- java int to hex_Java字符串转16 进制工具类Hex.java | 学步园
Java 字符串转 16 进制工具类 Hex.java 实现 16进制 0xfecd .. 和 java 字符串之间的互转换! 如果做开发,通常用户登陆密码都会 mad5(salt + pwd) 然后 ...
- 身份证处理工具类(java)
import org.apache.commons.lang3.StringUtils;import java.util.Calendar; import java.util.Collections; ...
最新文章
- java_method_下拉框成json
- GHOST分区丢失只剩C盘
- 【Greenplum代码】记录一次不了解GP数据库编号函数使用方法导致的问题(1次疏忽 + 1次不必要 = 2次弯路)
- 华为手机如何调时间显示_华为手机不亮屏也能显示时间日期?10秒就能设置,原来这么简单...
- Python稳基修炼之计算机等级考试易错细节题3(含答案)
- java socket 实现 http_Java Socket编程 - 基于Socket实现HTTP下载客户端
- IP转发引擎的三种核心处理器区别介绍
- win11提示无法安装程序包时该怎么办
- 关于磁碟机及Javqhc病毒
- 2019年程序员薪资报告,网友:年薪20万只是起薪?
- Android应用双开实现
- C++禁止键盘和鼠标事件
- win10打开软件提示无法成功完成操作 因为文件包含病毒
- android环信聊天界面上面显示昵称,【环信征文】在android中5分钟实现环信昵称头像的显示...
- 全面公测|Grafana服务:一张图表胜过千行指标日志
- java.lang.IllegalArgumentException: No converter found for return value of type: class com.sail.comm
- 俄罗斯钓鱼服务器位置,俄罗斯钓鱼4《RussianFishing4》钓鱼地点攻略
- Linux操作与管理文件(多次打开同一文件,文件共享,fcntl函数,标准IO库)
- 解决Eclipse “Polling news feeds...”弹出的问题
- guacamole 源码_guacamole插件开发
热门文章
- vector的 resize()和reserve()的区别
- 智行者王肖:自动驾驶本质在于对待数据的态度、获取及应用方式 | 自动驾驶这十年...
- java 初级、中级、高级工程师
- 【Numpy】np.savetxt保存时数据不使用科学计数法形式
- 【转载】一个硕士程序员的求婚日记——做开发的不是木头人!
- 微信营销分析之最有效的微信推广技巧
- RocketMQ 的安装和可视化界面
- Ubuntu卷boot仅剩0字节的硬盘空间解决方案
- 莫提博客 - 简约优雅的个人博客系统
- cocos植物大战僵尸(三)游戏场景:地图滚动