/**
* 校验工具类
*
* @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}$";
}
只加入了最基本的校验,需要的可以另外加