【验证工具类-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几个验证方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值