package com.zbkj.common.utils; import cn.hutool.core.util.ReUtil; import com.zbkj.common.constants.RegularConstants; import com.zbkj.common.exception.CarException; import com.zbkj.common.model.system.SystemConfig; import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.regex.Pattern; /** * 表单验证类 */ public class ValidateFormUtil { /** * 检测类型 * @param systemConfig SystemConfig 需要验证的类 * @author Mr.Zhang * @since 2020-05-11 */ public static void checkType(SystemConfig systemConfig, String rule){ if(StringUtils.isBlank(rule)){ return; } //required:true,min:0,max:100,number:true List list = CarUtil.stringToArrayStr(rule); for (String value : list) { List val = CarUtil.stringToArrayStrRegex(value, ":"); ////必填 if(val.get(0).equals("required") && val.get(1).equals("true")){ isRequire(systemConfig.getValue(), systemConfig.getTitle()); continue; } //数字 if(val.get(0).equals("number") && val.get(1).equals("true")){ isNumber(systemConfig.getValue(), systemConfig.getTitle()); continue; } //最大值 if(val.get(0).equals("max")){ isNumber(systemConfig.getValue(), systemConfig.getTitle()); continue; } //最小值 if(val.get(0).equals("min")){ isNumber(systemConfig.getValue(), systemConfig.getTitle()); continue; } //邮箱 if(val.get(0).equals("email") && val.get(1).equals("true")){ isEmail(systemConfig.getValue(), systemConfig.getTitle()); continue; } //手机 if(val.get(0).equals("phone") && val.get(1).equals("true")){ isPhone(systemConfig.getValue(), systemConfig.getTitle()); } } } /** * 邮箱 * @param value String 值 * @param info String 字段名 * @author Mr.Zhang * @since 2020-05-11 */ public static void isEmail(String value, String info) { regularException(value, info, RegularConstants.EMAIL, "邮箱"); } /** * 手机 * @param value String 值 * @param info String 字段名 */ public static void isPhone(String value, String info) { regularException(value, info, RegularConstants.PHONE_TWO, "手机"); } /** * 验证必填 * @param value String 值 * @param info String 字段名 * @author Mr.Zhang * @since 2020-05-11 */ public static void isRequire(String value, String info){ if(StringUtils.isBlank(value) ){ throw new CarException("请填写/选择" + info); } } /** * 数字验证 * @param value String 值 * @param info String 字段名 * @author Mr.Zhang * @since 2020-05-11 */ public static void isNumber(String value, String info){ regularException(value, info, RegularConstants.NUMBER, "数字"); } /** * 数字范围 * @param value String 值 * @param info String 字段名 * @author Mr.Zhang * @since 2020-05-11 */ public static void range(String value, String info, Integer max, Integer min){ isNumber(value, info); max(value, info, max); min(value, info, min); } /** * 最大数值 * @param value String 值 * @param info String 字段名 * @author Mr.Zhang * @since 2020-05-11 */ public static void max(String value, String info, Integer max){ isNumber(value, info); int number = Integer.parseInt(value); if(number > max ){ throw new CarException(info + "不在取值范围内,最大不能大于" + max); } } /** * 最小数值 * @param value String 值 * @param info String 字段名 * @author Mr.Zhang * @since 2020-05-11 */ public static void min(String value, String info, Integer min){ isNumber(value, info); int number = Integer.parseInt(value); if(number > min ){ throw new CarException(info + "不在取值范围内,最小不能小于" + min); } } /** * 正则表达式验证 * @param value String 值 * @param info String 字段名 * @param regular String 正则表达式 * @author Mr.Zhang * @since 2020-05-11 */ public static void regularException(String value, String info, String regular, String title){ if(!regular(value, info, regular)){ //正则验证 throw new CarException(info + " 格式必须为 " + title); } } /** * 正则表达式验证 * @param value String 值 * @param info String 字段名 * @param regular String 正则表达式 * @author Mr.Zhang * @since 2020-05-11 */ public static boolean regular(String value, String info, String regular){ isRequire(value, info); Pattern pattern = Pattern.compile(regular); return pattern.matcher(value).matches(); } /** * 校验是否是手机号,不是则抛出异常 * @param phone 手机号 * @param errMsg 异常内容 */ public static void isPhoneException(String phone, String errMsg) { boolean match = ReUtil.isMatch(RegularConstants.PHONE_TWO, phone); if (!match) { throw new CarException(errMsg); } } /** * 校验是否是手机号,不是则抛出异常 * @param phone 手机号 */ public static void isPhoneException(String phone) { boolean match = ReUtil.isMatch(RegularConstants.PHONE_TWO, phone); if (!match) { throw new CarException("请输入正确的手机号"); } } }