Java反射+正则做通用校验工具类

/**
 * 校验工具类
 *
 * @author chenyixin
 * @date 2022/09/02
 */
public class CheckUtils {
    /**
     * 校验
     *
     * @param checkList              需要校验的集合
     * @param startRow               开始行
     * @param filedMap               字段跟字段名的映射Map
     * @param checkNullField         需要校验空的字段(各字段用逗号分隔)
     * @param checkYearMonthDayField 需要校验年月日的字段(yyyy/MM/dd)(各字段用逗号分隔)
     * @param checkYearMonthField    需要校验年月的字段(yyyy/MM)(各字段用逗号分隔)
     * @param checkDecimal2Field     需要校验两位小数的字段(各字段用逗号分隔)
     * @param checkDecimal3Field     需要校验三位小数的字段(各字段用逗号分隔)
     * @return {@link String}
     */
    public static <T> StringBuilder checkList(List<T> checkList,
                                              int startRow,
                                              Map<String, String> filedMap,
                                              String checkNullField,
                                              String checkYearMonthDayField,
                                              String checkYearMonthField,
                                              String checkDecimal2Field,
                                              String checkDecimal3Field) {
        StringBuilder errMsg = new StringBuilder();

        if (checkList == null || checkList.size() == 0) {
            return errMsg;
        }
        Field[] declaredFields = checkList.get(0).getClass().getDeclaredFields();
        for (int i = 0; i < checkList.size(); i++) {
            for (Field f : declaredFields) {
                int row = i + startRow;
                try {
                    f.setAccessible(true);

                    if (f.get(checkList.get(i)) == null && checkNullField != null && checkNullField.contains(f.getName())) {
                        errMsg.append("第").append(row).append("行").append(filedMap.get(f.getName())).append("不能为空!</br>");
                    }
                    if (f.get(checkList.get(i)) != null && checkYearMonthDayField != null && checkYearMonthDayField.contains(f.getName())) {
                        // 年月日日期校验
                        if (!Pattern.matches(RegexConstant.YEAR_MONTH_DAY_REGEX, f.get(checkList.get(i)).toString())) {
                            errMsg.append("第").append(row).append("行").append(filedMap.get(f.getName())).append("格式错误,应为yyyy/MM/dd!</br>");
                        }
                    }
                    if (f.get(checkList.get(i)) != null && checkYearMonthField != null && checkYearMonthField.contains(f.getName())) {
                        // 年月日期校验
                        if (!Pattern.matches(RegexConstant.YEAR_MONTH_REGEX, f.get(checkList.get(i)).toString())) {
                            errMsg.append("第").append(row).append("行").append(filedMap.get(f.getName())).append("格式错误,应为yyyy/MM!</br>");
                        }
                    }
                    if (f.get(checkList.get(i)) != null && checkDecimal2Field != null && checkDecimal2Field.contains(f.getName())) {
                        // 两位小数校验
                        if (!Pattern.matches(RegexConstant.AMOUNT2_REGEX, f.get(checkList.get(i)).toString())) {
                            errMsg.append("第").append(row).append("行").append(filedMap.get(f.getName())).append("格式错误,应为小数两位的数字!</br>");
                        }
                    }
                    if (f.get(checkList.get(i)) != null && checkDecimal3Field != null && checkDecimal3Field.contains(f.getName())) {
                        // 三位小数校验
                        if (!Pattern.matches(RegexConstant.AMOUNT3_REGEX, f.get(checkList.get(i)).toString())) {
                            errMsg.append("第").append(row).append("行").append(filedMap.get(f.getName())).append("格式错误,应为小数三位的数字!</br>");
                        }
                    }
                } catch (Exception ignored) {
                }
            }
        }
        return errMsg;
    }
}
/**
 * 正则表达式
 *
 * @author chenyixin
 * @since 2022/09/02
 */
public class RegexConstant {    
    /** 保留3位小数及以下的数字 **/
    public static final String AMOUNT3_REGEX = "^-?([1-9][0-9]+|[0-9])(\\.[0-9]{1,3})?$";

    /** 保留2位小数及以下的数字 **/
    public static final String AMOUNT2_REGEX = "^-?([1-9][0-9]+|[0-9])(\\.[0-9]{1,2})?$";

    /** 年月日校验 **/
    public static final String YEAR_MONTH_DAY_REGEX = "^\\d{4}/\\d{2}/\\d{2}$";

    /** 年月日校验 **/
    public static final String YEAR_MONTH_REGEX = "^\\d{4}/\\d{2}$";
}

只加入了最基本的校验,需要的可以另外加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值