对于前端穿过来的值要做验证处理,但市面上已经存在很多验证框架了。这里作为自己实现得思路和整理,有需要特别验证得可以自己实现自己想要得。

实现一个工具类

/*** @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】相关推荐

  1. java sm3国密算法加密、验证工具类

    java sm3国密算法加密.验证工具类 说明 maven依赖 完整代码 测试 说明 由于本人并不专于算法和密码学,所以如果发现工具类存在问题或者可优化地方,欢迎评论处提出. 工具类也可以直接使用封装 ...

  2. Android 身份证、车牌号验证工具类

    /*** 正在表达式验证工具类(验证身份证.车牌号等)* * @author chenlin* */ public class ValidateUtil {/*** 验证str是否为正确的身份证格式* ...

  3. 苹果IAP内购验证工具类

    苹果内购 java验证类 package com.utils.ios; import lombok.extern.slf4j.Slf4j;import javax.net.ssl.*; import ...

  4. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  5. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具

    原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...

  6. Math数学工具类在java中如何使用?

    Math数学工具类在java中如何使用? 一.Math数学工具类是什么? 在处理业务的时候,经常遇到一些有关数学方面的计算,特别是做测绘和监测业务时,显得出现的频率及其多, JDK提供了一个Math类 ...

  7. 身份证、护照、军官证、户口本验证工具类

    身份证.护照.军官证.户口本验证工具类 public class CertificateValidUtils {/*** 中国公民身份证号码最小长度.*/public static final int ...

  8. java int to hex_Java字符串转16 进制工具类Hex.java | 学步园

    Java 字符串转 16 进制工具类 Hex.java 实现 16进制 0xfecd .. 和 java 字符串之间的互转换! 如果做开发,通常用户登陆密码都会 mad5(salt + pwd) 然后 ...

  9. 身份证处理工具类(java)

    import org.apache.commons.lang3.StringUtils;import java.util.Calendar; import java.util.Collections; ...

最新文章

  1. java_method_下拉框成json
  2. GHOST分区丢失只剩C盘
  3. 【Greenplum代码】记录一次不了解GP数据库编号函数使用方法导致的问题(1次疏忽 + 1次不必要 = 2次弯路)
  4. 华为手机如何调时间显示_华为手机不亮屏也能显示时间日期?10秒就能设置,原来这么简单...
  5. Python稳基修炼之计算机等级考试易错细节题3(含答案)
  6. java socket 实现 http_Java Socket编程 - 基于Socket实现HTTP下载客户端
  7. IP转发引擎的三种核心处理器区别介绍
  8. win11提示无法安装程序包时该怎么办
  9. 关于磁碟机及Javqhc病毒
  10. 2019年程序员薪资报告,网友:年薪20万只是起薪?
  11. Android应用双开实现
  12. C++禁止键盘和鼠标事件
  13. win10打开软件提示无法成功完成操作 因为文件包含病毒
  14. android环信聊天界面上面显示昵称,【环信征文】在android中5分钟实现环信昵称头像的显示...
  15. 全面公测|Grafana服务:一张图表胜过千行指标日志
  16. java.lang.IllegalArgumentException: No converter found for return value of type: class com.sail.comm
  17. 俄罗斯钓鱼服务器位置,俄罗斯钓鱼4《RussianFishing4》钓鱼地点攻略
  18. Linux操作与管理文件(多次打开同一文件,文件共享,fcntl函数,标准IO库)
  19. 解决Eclipse “Polling news feeds...”弹出的问题
  20. guacamole 源码_guacamole插件开发

热门文章

  1. vector的 resize()和reserve()的区别
  2. 智行者王肖:自动驾驶本质在于对待数据的态度、获取及应用方式 | 自动驾驶这十年...
  3. java 初级、中级、高级工程师
  4. 【Numpy】np.savetxt保存时数据不使用科学计数法形式
  5. 【转载】一个硕士程序员的求婚日记——做开发的不是木头人!
  6. 微信营销分析之最有效的微信推广技巧
  7. RocketMQ 的安装和可视化界面
  8. Ubuntu卷boot仅剩0字节的硬盘空间解决方案
  9. 莫提博客 - 简约优雅的个人博客系统
  10. cocos植物大战僵尸(三)游戏场景:地图滚动