From b3b9b5af565d00d60e79791d890374d5b1f07ab8 Mon Sep 17 00:00:00 2001 From: richardtang <1245811923@qq.com> Date: Fri, 20 Sep 2019 08:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=A4=E5=A4=84=E6=8B=BC?= =?UTF-8?q?=E5=86=99=E9=94=99=E8=AF=AF=E5=8D=95=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/lang/Validator.java | 2138 ++++++++--------- 1 file changed, 1069 insertions(+), 1069 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java index 368a84d52..a131532c0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java @@ -1,1069 +1,1069 @@ -package cn.hutool.core.lang; - -import java.net.MalformedURLException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.exceptions.ValidateException; -import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.ReUtil; -import cn.hutool.core.util.StrUtil; - -/** - * 字段验证器 - * - * @author Looly - * - */ -public class Validator { - - private Validator() { - } - - /** 英文字母 、数字和下划线 */ - public final static Pattern GENERAL = PatternPool.GENERAL; - /** 数字 */ - public final static Pattern NUMBERS = PatternPool.NUMBERS; - /** 分组 */ - public final static Pattern GROUP_VAR = PatternPool.GROUP_VAR; - /** IP v4 */ - public final static Pattern IPV4 = PatternPool.IPV4; - /** IP v6 */ - public final static Pattern IPV6 = PatternPool.IPV6; - /** 货币 */ - public final static Pattern MONEY = PatternPool.MONEY; - /** 邮件 */ - public final static Pattern EMAIL = PatternPool.EMAIL; - /** 移动电话 */ - public final static Pattern MOBILE = PatternPool.MOBILE; - /** 身份证号码 */ - public final static Pattern CITIZEN_ID = PatternPool.CITIZEN_ID; - /** 邮编 */ - public final static Pattern ZIP_CODE = PatternPool.ZIP_CODE; - /** 生日 */ - public final static Pattern BIRTHDAY = PatternPool.BIRTHDAY; - /** URL */ - public final static Pattern URL = PatternPool.URL; - /** Http URL */ - public final static Pattern URL_HTTP = PatternPool.URL_HTTP; - /** 中文字、英文字母、数字和下划线 */ - public final static Pattern GENERAL_WITH_CHINESE = PatternPool.GENERAL_WITH_CHINESE; - /** UUID */ - public final static Pattern UUID = PatternPool.UUID; - /** 不带横线的UUID */ - public final static Pattern UUID_SIMPLE = PatternPool.UUID_SIMPLE; - /** 中国车牌号码 */ - public final static Pattern PLATE_NUMBER = PatternPool.PLATE_NUMBER; - - /** - * 给定值是否为true - * - * @param value 值 - * @return 是否为ture - * @since 4.4.5 - */ - public static boolean isTrue(boolean value) { - return value; - } - - /** - * 给定值是否不为false - * - * @param value 值 - * @return 是否不为false - * @since 4.4.5 - */ - public static boolean isFalse(boolean value) { - return false == value; - } - - /** - * 检查指定值是否为ture - * - * @param value 值 - * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 - * @return 检查过后的值 - * @throws ValidateException 检查不满足条件抛出的异常 - * @since 4.4.5 - */ - public static boolean validateTrue(boolean value, String errorMsgTemplate, Object... params) throws ValidateException { - if (isFalse(value)) { - throw new ValidateException(errorMsgTemplate, params); - } - return value; - } - - /** - * 检查指定值是否为false - * - * @param value 值 - * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 - * @return 检查过后的值 - * @throws ValidateException 检查不满足条件抛出的异常 - * @since 4.4.5 - */ - public static boolean validateFalse(boolean value, String errorMsgTemplate, Object... params) throws ValidateException { - if (isTrue(value)) { - throw new ValidateException(errorMsgTemplate, params); - } - return value; - } - - /** - * 给定值是否为null - * - * @param value 值 - * @return 是否为null - */ - public static boolean isNull(Object value) { - return null == value; - } - - /** - * 给定值是否不为null - * - * @param value 值 - * @return 是否不为null - */ - public static boolean isNotNull(Object value) { - return null != value; - } - - /** - * 检查指定值是否为null - * - * @param 被检查的对象类型 - * @param value 值 - * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 - * @return 检查过后的值 - * @throws ValidateException 检查不满足条件抛出的异常 - * @since 4.4.5 - */ - public static T validateNull(T value, String errorMsgTemplate, Object... params) throws ValidateException { - if (isNotNull(value)) { - throw new ValidateException(errorMsgTemplate, params); - } - return value; - } - - /** - * 检查指定值是否非null - * - * @param 被检查的对象类型 - * @param value 值 - * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) - * @param params 模板中变量替换后的值 - * @return 检查过后的值 - * @throws ValidateException 检查不满足条件抛出的异常 - */ - public static T validateNotNull(T value, String errorMsgTemplate, Object... params) throws ValidateException { - if (isNull(value)) { - throw new ValidateException(errorMsgTemplate, params); - } - return value; - } - - /** - * 验证是否为空
- * 对于String类型判定是否为empty(null 或 "")
- * - * @param value 值 - * @return 是否为空 - * @return 是否为空 - */ - public static boolean isEmpty(Object value) { - return (null == value || (value instanceof String && StrUtil.isEmpty((String) value))); - } - - /** - * 验证是否为非空
- * 对于String类型判定是否为empty(null 或 "")
- * - * @param value 值 - * @return 是否为空 - * @return 是否为空 - */ - public static boolean isNotEmpty(Object value) { - return false == isEmpty(value); - } - - /** - * 验证是否为空,非空时抛出异常
- * 对于String类型判定是否为empty(null 或 "")
- * - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值,验证通过返回此值,空值 - * @throws ValidateException 验证异常 - */ - public static T validateEmpty(T value, String errorMsg) throws ValidateException { - if (isNotEmpty(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为非空,为空时抛出异常
- * 对于String类型判定是否为empty(null 或 "")
- * - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值,验证通过返回此值,非空值 - * @throws ValidateException 验证异常 - */ - public static T validateNotEmpty(T value, String errorMsg) throws ValidateException { - if (isEmpty(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否相等
- * 当两值都为null返回true - * - * @param t1 对象1 - * @param t2 对象2 - * @return 当两值都为null或相等返回true - */ - public static boolean equal(Object t1, Object t2) { - return ObjectUtil.equal(t1, t2); - } - - /** - * 验证是否相等,不相等抛出异常
- * - * @param t1 对象1 - * @param t2 对象2 - * @param errorMsg 错误信息 - * @return 相同值 - * @throws ValidateException 验证异常 - */ - public static Object validateEqual(Object t1, Object t2, String errorMsg) throws ValidateException { - if (false == equal(t1, t2)) { - throw new ValidateException(errorMsg); - } - return t1; - } - - /** - * 验证是否不等,相等抛出异常
- * - * @param t1 对象1 - * @param t2 对象2 - * @param errorMsg 错误信息 - * @throws ValidateException 验证异常 - */ - public static void validateNotEqual(Object t1, Object t2, String errorMsg) throws ValidateException { - if (equal(t1, t2)) { - throw new ValidateException(errorMsg); - } - } - - /** - * 验证是否非空且与指定值相等
- * 当数据为空时抛出验证异常
- * 当两值不等时抛出异常 - * - * @param t1 对象1 - * @param t2 对象2 - * @param errorMsg 错误信息 - * @throws ValidateException 验证异常 - */ - public static void validateNotEmptyAndEqual(Object t1, Object t2, String errorMsg) throws ValidateException { - validateNotEmpty(t1, errorMsg); - validateEqual(t1, t2, errorMsg); - } - - /** - * 验证是否非空且与指定值相等
- * 当数据为空时抛出验证异常
- * 当两值相等时抛出异常 - * - * @param t1 对象1 - * @param t2 对象2 - * @param errorMsg 错误信息 - * @throws ValidateException 验证异常 - */ - public static void validateNotEmptyAndNotEqual(Object t1, Object t2, String errorMsg) throws ValidateException { - validateNotEmpty(t1, errorMsg); - validateNotEqual(t1, t2, errorMsg); - } - - /** - * 通过正则表达式验证 - * - * @param regex 正则 - * @param value 值 - * @return 是否匹配正则 - */ - public static boolean isMactchRegex(String regex, CharSequence value) { - return ReUtil.isMatch(regex, value); - } - - /** - * 通过正则表达式验证
- * 不符合正则抛出{@link ValidateException} 异常 - * - * @param 字符串类型 - * @param regex 正则 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateMatchRegex(String regex, T value, String errorMsg) throws ValidateException { - if (false == isMactchRegex(regex, value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 通过正则表达式验证 - * - * @param pattern 正则模式 - * @param value 值 - * @return 是否匹配正则 - */ - public static boolean isMactchRegex(Pattern pattern, CharSequence value) { - return ReUtil.isMatch(pattern, value); - } - - /** - * 验证是否为英文字母 、数字和下划线 - * - * @param value 值 - * @return 是否为英文字母 、数字和下划线 - */ - public static boolean isGeneral(CharSequence value) { - return isMactchRegex(GENERAL, value); - } - - /** - * 验证是否为英文字母 、数字和下划线 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateGeneral(T value, String errorMsg) throws ValidateException { - if (false == isGeneral(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为给定长度范围的英文字母 、数字和下划线 - * - * @param value 值 - * @param min 最小长度,负数自动识别为0 - * @param max 最大长度,0或负数表示不限制最大长度 - * @return 是否为给定长度范围的英文字母 、数字和下划线 - */ - public static boolean isGeneral(CharSequence value, int min, int max) { - if (min < 0) { - min = 0; - } - String reg = "^\\w{" + min + "," + max + "}$"; - if (max <= 0) { - reg = "^\\w{" + min + ",}$"; - } - return isMactchRegex(reg, value); - } - - /** - * 验证是否为给定长度范围的英文字母 、数字和下划线 - * - * @param 字符串类型 - * @param value 值 - * @param min 最小长度,负数自动识别为0 - * @param max 最大长度,0或负数表示不限制最大长度 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateGeneral(T value, int min, int max, String errorMsg) throws ValidateException { - if (false == isGeneral(value, min, max)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为给定最小长度的英文字母 、数字和下划线 - * - * @param value 值 - * @param min 最小长度,负数自动识别为0 - * @return 是否为给定最小长度的英文字母 、数字和下划线 - */ - public static boolean isGeneral(CharSequence value, int min) { - return isGeneral(value, min, 0); - } - - /** - * 验证是否为给定最小长度的英文字母 、数字和下划线 - * - * @param 字符串类型 - * @param value 值 - * @param min 最小长度,负数自动识别为0 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateGeneral(T value, int min, String errorMsg) throws ValidateException { - return validateGeneral(value, min, 0, errorMsg); - } - - /** - * 判断字符串是否全部为字母组成,包括大写和小写字母和汉字 - * - * @param value 值 - * @return 是否全部为字母组成,包括大写和小写字母和汉字 - * @since 3.3.0 - */ - public static boolean isLetter(CharSequence value) { - return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher() { - @Override - public boolean match(Character t) { - return Character.isLetter(t); - } - }); - } - - /** - * 验证是否全部为字母组成,包括大写和小写字母和汉字 - * - * @param 字符串类型 - * @param value 表单值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - * @since 3.3.0 - */ - public static T validateLetter(T value, String errorMsg) throws ValidateException { - if (false == isLetter(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 判断字符串是否全部为大写字母 - * - * @param value 值 - * @return 是否全部为大写字母 - * @since 3.3.0 - */ - public static boolean isUpperCase(CharSequence value) { - return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher() { - @Override - public boolean match(Character t) { - return Character.isUpperCase(t); - } - }); - } - - /** - * 验证字符串是否全部为大写字母 - * - * @param 字符串类型 - * @param value 表单值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - * @since 3.3.0 - */ - public static T validateUpperCase(T value, String errorMsg) throws ValidateException { - if (false == isUpperCase(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 判断字符串是否全部为小写字母 - * - * @param value 值 - * @return 是否全部为小写字母 - * @since 3.3.0 - */ - public static boolean isLowerCase(CharSequence value) { - return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher() { - @Override - public boolean match(Character t) { - return Character.isLowerCase(t); - } - }); - } - - /** - * 验证字符串是否全部为小写字母 - * - * @param 字符串类型 - * @param value 表单值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - * @since 3.3.0 - */ - public static T validateLowerCase(T value, String errorMsg) throws ValidateException { - if (false == isLowerCase(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证该字符串是否是数字 - * - * @param value 字符串内容 - * @return 是否是数字 - */ - public static boolean isNumber(String value) { - return NumberUtil.isNumber(value); - } - - /** - * 验证是否为数字 - * - * @param value 表单值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static String validateNumber(String value, String errorMsg) throws ValidateException { - if (false == isNumber(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证该字符串是否是字母(包括大写和小写字母) - * - * @param value 字符串内容 - * @return 是否是字母(包括大写和小写字母) - * @since 4.1.8 - */ - public static boolean isWord(CharSequence value) { - return isMactchRegex(PatternPool.WORD, value); - } - - /** - * 验证是否为字母(包括大写和小写字母) - * - * @param 字符串类型 - * @param value 表单值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - * @since 4.1.8 - */ - public static T validateWord(T value, String errorMsg) throws ValidateException { - if (false == isWord(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为货币 - * - * @param value 值 - * @return 是否为货币 - */ - public static boolean isMoney(CharSequence value) { - return isMactchRegex(MONEY, value); - } - - /** - * 验证是否为货币 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateMoney(T value, String errorMsg) throws ValidateException { - if (false == isMoney(value)) { - throw new ValidateException(errorMsg); - } - return value; - - } - - /** - * 验证是否为邮政编码(中国) - * - * @param value 值 - * @return 是否为邮政编码(中国) - */ - public static boolean isZipCode(CharSequence value) { - return isMactchRegex(ZIP_CODE, value); - } - - /** - * 验证是否为邮政编码(中国) - * - * @param 字符串类型 - * @param value 表单值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateZipCode(T value, String errorMsg) throws ValidateException { - if (false == isZipCode(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为可用邮箱地址 - * - * @param value 值 - * @return 否为可用邮箱地址 - */ - public static boolean isEmail(CharSequence value) { - return isMactchRegex(EMAIL, value); - } - - /** - * 验证是否为可用邮箱地址 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateEmail(T value, String errorMsg) throws ValidateException { - if (false == isEmail(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为手机号码(中国) - * - * @param value 值 - * @return 是否为手机号码(中国) - */ - public static boolean isMobile(CharSequence value) { - return isMactchRegex(MOBILE, value); - } - - /** - * 验证是否为手机号码(中国) - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateMobile(T value, String errorMsg) throws ValidateException { - if (false == isMobile(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为身份证号码(18位中国)
- * 出生日期只支持到到2999年 - * - * @param value 值 - * @return 是否为身份证号码(18位中国) - */ - public static boolean isCitizenId(CharSequence value) { - return isMactchRegex(CITIZEN_ID, value); - } - - /** - * 验证是否为身份证号码(18位中国)
- * 出生日期只支持到到2999年 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateCitizenIdNumber(T value, String errorMsg) throws ValidateException { - if (false == isCitizenId(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为生日 - * - * @param year 年,从1900年开始计算 - * @param month 月,从1开始计数 - * @param day 日,从1开始计数 - * @return 是否为生日 - */ - public static boolean isBirthday(int year, int month, int day) { - // 验证年 - int thisYear = DateUtil.thisYear(); - if (year < 1900 || year > thisYear) { - return false; - } - - // 验证月 - if (month < 1 || month > 12) { - return false; - } - - // 验证日 - if (day < 1 || day > 31) { - return false; - } - if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) { - return false; - } - if (month == 2) { - if (day > 29 || (day == 29 && false == DateUtil.isLeapYear(year))) { - return false; - } - } - return true; - } - - /** - * 验证是否为生日
- * 只支持以下几种格式: - *
    - *
  • yyyyMMdd
  • - *
  • yyyy-MM-dd
  • - *
  • yyyy/MM/dd
  • - *
  • yyyy.MM.dd
  • - *
  • yyyy年MM月dd日
  • - *
- * - * @param value 值 - * @return 是否为生日 - */ - public static boolean isBirthday(CharSequence value) { - if (isMactchRegex(BIRTHDAY, value)) { - Matcher matcher = BIRTHDAY.matcher(value); - if (matcher.find()) { - int year = Integer.parseInt(matcher.group(1)); - int month = Integer.parseInt(matcher.group(3)); - int day = Integer.parseInt(matcher.group(5)); - return isBirthday(year, month, day); - } - } - return false; - } - - /** - * 验证验证是否为生日 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateBirthday(T value, String errorMsg) throws ValidateException { - if (false == isBirthday(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为IPV4地址 - * - * @param value 值 - * @return 是否为IPV4地址 - */ - public static boolean isIpv4(CharSequence value) { - return isMactchRegex(IPV4, value); - } - - /** - * 验证是否为IPV4地址 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateIpv4(T value, String errorMsg) throws ValidateException { - if (false == isIpv4(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为IPV6地址 - * - * @param value 值 - * @return 是否为IPV6地址 - */ - public static boolean isIpv6(CharSequence value) { - return isMactchRegex(IPV6, value); - } - - /** - * 验证是否为IPV6地址 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateIpv6(T value, String errorMsg) throws ValidateException { - if (false == isIpv6(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为MAC地址 - * - * @param value 值 - * @return 是否为MAC地址 - * @since 4.1.3 - */ - public static boolean isMac(CharSequence value) { - return isMactchRegex(PatternPool.MAC_ADDRESS, value); - } - - /** - * 验证是否为MAC地址 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - * @since 4.1.3 - */ - public static T validateMac(T value, String errorMsg) throws ValidateException { - if (false == isMac(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为中国车牌号 - * - * @param value 值 - * @return 是否为中国车牌号 - * @since 3.0.6 - */ - public static boolean isPlateNumber(CharSequence value) { - return isMactchRegex(PLATE_NUMBER, value); - } - - /** - * 验证是否为中国车牌号 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - * @since 3.0.6 - */ - public static T validatePlateNumber(T value, String errorMsg) throws ValidateException { - if (false == isPlateNumber(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为URL - * - * @param value 值 - * @return 是否为URL - */ - public static boolean isUrl(CharSequence value) { - try { - new java.net.URL(StrUtil.str(value)); - } catch (MalformedURLException e) { - return false; - } - return true; - } - - /** - * 验证是否为URL - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateUrl(T value, String errorMsg) throws ValidateException { - if (false == isUrl(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为汉字 - * - * @param value 值 - * @return 是否为汉字 - */ - public static boolean isChinese(CharSequence value) { - return isMactchRegex("^" + ReUtil.RE_CHINESE + "+$", value); - } - - /** - * 验证是否为汉字 - * - * @param 字符串类型 - * @param value 表单值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateChinese(T value, String errorMsg) throws ValidateException { - if (false == isChinese(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为中文字、英文字母、数字和下划线 - * - * @param value 值 - * @return 是否为中文字、英文字母、数字和下划线 - */ - public static boolean isGeneralWithChinese(CharSequence value) { - return isMactchRegex(GENERAL_WITH_CHINESE, value); - } - - /** - * 验证是否为中文字、英文字母、数字和下划线 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateGeneralWithChinese(T value, String errorMsg) throws ValidateException { - if (false == isGeneralWithChinese(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为UUID
- * 包括带横线标准格式和不带横线的简单模式 - * - * @param value 值 - * @return 是否为UUID - */ - public static boolean isUUID(CharSequence value) { - return isMactchRegex(UUID, value) || isMactchRegex(UUID_SIMPLE, value); - } - - /** - * 验证是否为UUID
- * 包括带横线标准格式和不带横线的简单模式 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - */ - public static T validateUUID(T value, String errorMsg) throws ValidateException { - if (false == isUUID(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 验证是否为Hex(16进制)字符串 - * - * @param value 值 - * @return 是否为Hex(16进制)字符串 - * @since 4.3.3 - */ - public static boolean isHex(CharSequence value) { - return isMactchRegex(PatternPool.HEX, value); - } - - /** - * 验证是否为Hex(16进制)字符串 - * - * @param 字符串类型 - * @param value 值 - * @param errorMsg 验证错误的信息 - * @return 验证后的值 - * @throws ValidateException 验证异常 - * @since 4.3.3 - */ - public static T validateHex(T value, String errorMsg) throws ValidateException { - if (false == isHex(value)) { - throw new ValidateException(errorMsg); - } - return value; - } - - /** - * 检查给定的数字是否在指定范围内 - * - * @param value 值 - * @param min 最小值(包含) - * @param max 最大值(包含) - * @return 是否满足 - * @since 4.1.10 - */ - public static boolean isBetween(Number value, Number min, Number max) { - Assert.notNull(value); - Assert.notNull(min); - Assert.notNull(max); - final double doubleValue = value.doubleValue(); - return (doubleValue >= min.doubleValue()) && (doubleValue <= max.doubleValue()); - } - - /** - * 检查给定的数字是否在指定范围内 - * - * @param value 值 - * @param min 最小值(包含) - * @param max 最大值(包含) - * @param errorMsg 验证错误的信息 - * @throws ValidateException 验证异常 - * @since 4.1.10 - */ - public static void validateBetween(Number value, Number min, Number max, String errorMsg) throws ValidateException { - if (false == isBetween(value, min, max)) { - throw new ValidateException(errorMsg); - } - } -} +package cn.hutool.core.lang; + +import java.net.MalformedURLException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.exceptions.ValidateException; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; +import cn.hutool.core.util.StrUtil; + +/** + * 字段验证器 + * + * @author Looly + * + */ +public class Validator { + + private Validator() { + } + + /** 英文字母 、数字和下划线 */ + public final static Pattern GENERAL = PatternPool.GENERAL; + /** 数字 */ + public final static Pattern NUMBERS = PatternPool.NUMBERS; + /** 分组 */ + public final static Pattern GROUP_VAR = PatternPool.GROUP_VAR; + /** IP v4 */ + public final static Pattern IPV4 = PatternPool.IPV4; + /** IP v6 */ + public final static Pattern IPV6 = PatternPool.IPV6; + /** 货币 */ + public final static Pattern MONEY = PatternPool.MONEY; + /** 邮件 */ + public final static Pattern EMAIL = PatternPool.EMAIL; + /** 移动电话 */ + public final static Pattern MOBILE = PatternPool.MOBILE; + /** 身份证号码 */ + public final static Pattern CITIZEN_ID = PatternPool.CITIZEN_ID; + /** 邮编 */ + public final static Pattern ZIP_CODE = PatternPool.ZIP_CODE; + /** 生日 */ + public final static Pattern BIRTHDAY = PatternPool.BIRTHDAY; + /** URL */ + public final static Pattern URL = PatternPool.URL; + /** Http URL */ + public final static Pattern URL_HTTP = PatternPool.URL_HTTP; + /** 中文字、英文字母、数字和下划线 */ + public final static Pattern GENERAL_WITH_CHINESE = PatternPool.GENERAL_WITH_CHINESE; + /** UUID */ + public final static Pattern UUID = PatternPool.UUID; + /** 不带横线的UUID */ + public final static Pattern UUID_SIMPLE = PatternPool.UUID_SIMPLE; + /** 中国车牌号码 */ + public final static Pattern PLATE_NUMBER = PatternPool.PLATE_NUMBER; + + /** + * 给定值是否为true + * + * @param value 值 + * @return 是否为true + * @since 4.4.5 + */ + public static boolean isTrue(boolean value) { + return value; + } + + /** + * 给定值是否不为false + * + * @param value 值 + * @return 是否不为false + * @since 4.4.5 + */ + public static boolean isFalse(boolean value) { + return false == value; + } + + /** + * 检查指定值是否为true + * + * @param value 值 + * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) + * @param params 模板中变量替换后的值 + * @return 检查过后的值 + * @throws ValidateException 检查不满足条件抛出的异常 + * @since 4.4.5 + */ + public static boolean validateTrue(boolean value, String errorMsgTemplate, Object... params) throws ValidateException { + if (isFalse(value)) { + throw new ValidateException(errorMsgTemplate, params); + } + return value; + } + + /** + * 检查指定值是否为false + * + * @param value 值 + * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) + * @param params 模板中变量替换后的值 + * @return 检查过后的值 + * @throws ValidateException 检查不满足条件抛出的异常 + * @since 4.4.5 + */ + public static boolean validateFalse(boolean value, String errorMsgTemplate, Object... params) throws ValidateException { + if (isTrue(value)) { + throw new ValidateException(errorMsgTemplate, params); + } + return value; + } + + /** + * 给定值是否为null + * + * @param value 值 + * @return 是否为null + */ + public static boolean isNull(Object value) { + return null == value; + } + + /** + * 给定值是否不为null + * + * @param value 值 + * @return 是否不为null + */ + public static boolean isNotNull(Object value) { + return null != value; + } + + /** + * 检查指定值是否为null + * + * @param 被检查的对象类型 + * @param value 值 + * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) + * @param params 模板中变量替换后的值 + * @return 检查过后的值 + * @throws ValidateException 检查不满足条件抛出的异常 + * @since 4.4.5 + */ + public static T validateNull(T value, String errorMsgTemplate, Object... params) throws ValidateException { + if (isNotNull(value)) { + throw new ValidateException(errorMsgTemplate, params); + } + return value; + } + + /** + * 检查指定值是否非null + * + * @param 被检查的对象类型 + * @param value 值 + * @param errorMsgTemplate 错误消息内容模板(变量使用{}表示) + * @param params 模板中变量替换后的值 + * @return 检查过后的值 + * @throws ValidateException 检查不满足条件抛出的异常 + */ + public static T validateNotNull(T value, String errorMsgTemplate, Object... params) throws ValidateException { + if (isNull(value)) { + throw new ValidateException(errorMsgTemplate, params); + } + return value; + } + + /** + * 验证是否为空
+ * 对于String类型判定是否为empty(null 或 "")
+ * + * @param value 值 + * @return 是否为空 + * @return 是否为空 + */ + public static boolean isEmpty(Object value) { + return (null == value || (value instanceof String && StrUtil.isEmpty((String) value))); + } + + /** + * 验证是否为非空
+ * 对于String类型判定是否为empty(null 或 "")
+ * + * @param value 值 + * @return 是否为空 + * @return 是否为空 + */ + public static boolean isNotEmpty(Object value) { + return false == isEmpty(value); + } + + /** + * 验证是否为空,非空时抛出异常
+ * 对于String类型判定是否为empty(null 或 "")
+ * + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值,验证通过返回此值,空值 + * @throws ValidateException 验证异常 + */ + public static T validateEmpty(T value, String errorMsg) throws ValidateException { + if (isNotEmpty(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为非空,为空时抛出异常
+ * 对于String类型判定是否为empty(null 或 "")
+ * + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值,验证通过返回此值,非空值 + * @throws ValidateException 验证异常 + */ + public static T validateNotEmpty(T value, String errorMsg) throws ValidateException { + if (isEmpty(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否相等
+ * 当两值都为null返回true + * + * @param t1 对象1 + * @param t2 对象2 + * @return 当两值都为null或相等返回true + */ + public static boolean equal(Object t1, Object t2) { + return ObjectUtil.equal(t1, t2); + } + + /** + * 验证是否相等,不相等抛出异常
+ * + * @param t1 对象1 + * @param t2 对象2 + * @param errorMsg 错误信息 + * @return 相同值 + * @throws ValidateException 验证异常 + */ + public static Object validateEqual(Object t1, Object t2, String errorMsg) throws ValidateException { + if (false == equal(t1, t2)) { + throw new ValidateException(errorMsg); + } + return t1; + } + + /** + * 验证是否不等,相等抛出异常
+ * + * @param t1 对象1 + * @param t2 对象2 + * @param errorMsg 错误信息 + * @throws ValidateException 验证异常 + */ + public static void validateNotEqual(Object t1, Object t2, String errorMsg) throws ValidateException { + if (equal(t1, t2)) { + throw new ValidateException(errorMsg); + } + } + + /** + * 验证是否非空且与指定值相等
+ * 当数据为空时抛出验证异常
+ * 当两值不等时抛出异常 + * + * @param t1 对象1 + * @param t2 对象2 + * @param errorMsg 错误信息 + * @throws ValidateException 验证异常 + */ + public static void validateNotEmptyAndEqual(Object t1, Object t2, String errorMsg) throws ValidateException { + validateNotEmpty(t1, errorMsg); + validateEqual(t1, t2, errorMsg); + } + + /** + * 验证是否非空且与指定值相等
+ * 当数据为空时抛出验证异常
+ * 当两值相等时抛出异常 + * + * @param t1 对象1 + * @param t2 对象2 + * @param errorMsg 错误信息 + * @throws ValidateException 验证异常 + */ + public static void validateNotEmptyAndNotEqual(Object t1, Object t2, String errorMsg) throws ValidateException { + validateNotEmpty(t1, errorMsg); + validateNotEqual(t1, t2, errorMsg); + } + + /** + * 通过正则表达式验证 + * + * @param regex 正则 + * @param value 值 + * @return 是否匹配正则 + */ + public static boolean isMactchRegex(String regex, CharSequence value) { + return ReUtil.isMatch(regex, value); + } + + /** + * 通过正则表达式验证
+ * 不符合正则抛出{@link ValidateException} 异常 + * + * @param 字符串类型 + * @param regex 正则 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateMatchRegex(String regex, T value, String errorMsg) throws ValidateException { + if (false == isMactchRegex(regex, value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 通过正则表达式验证 + * + * @param pattern 正则模式 + * @param value 值 + * @return 是否匹配正则 + */ + public static boolean isMactchRegex(Pattern pattern, CharSequence value) { + return ReUtil.isMatch(pattern, value); + } + + /** + * 验证是否为英文字母 、数字和下划线 + * + * @param value 值 + * @return 是否为英文字母 、数字和下划线 + */ + public static boolean isGeneral(CharSequence value) { + return isMactchRegex(GENERAL, value); + } + + /** + * 验证是否为英文字母 、数字和下划线 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateGeneral(T value, String errorMsg) throws ValidateException { + if (false == isGeneral(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为给定长度范围的英文字母 、数字和下划线 + * + * @param value 值 + * @param min 最小长度,负数自动识别为0 + * @param max 最大长度,0或负数表示不限制最大长度 + * @return 是否为给定长度范围的英文字母 、数字和下划线 + */ + public static boolean isGeneral(CharSequence value, int min, int max) { + if (min < 0) { + min = 0; + } + String reg = "^\\w{" + min + "," + max + "}$"; + if (max <= 0) { + reg = "^\\w{" + min + ",}$"; + } + return isMactchRegex(reg, value); + } + + /** + * 验证是否为给定长度范围的英文字母 、数字和下划线 + * + * @param 字符串类型 + * @param value 值 + * @param min 最小长度,负数自动识别为0 + * @param max 最大长度,0或负数表示不限制最大长度 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateGeneral(T value, int min, int max, String errorMsg) throws ValidateException { + if (false == isGeneral(value, min, max)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为给定最小长度的英文字母 、数字和下划线 + * + * @param value 值 + * @param min 最小长度,负数自动识别为0 + * @return 是否为给定最小长度的英文字母 、数字和下划线 + */ + public static boolean isGeneral(CharSequence value, int min) { + return isGeneral(value, min, 0); + } + + /** + * 验证是否为给定最小长度的英文字母 、数字和下划线 + * + * @param 字符串类型 + * @param value 值 + * @param min 最小长度,负数自动识别为0 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateGeneral(T value, int min, String errorMsg) throws ValidateException { + return validateGeneral(value, min, 0, errorMsg); + } + + /** + * 判断字符串是否全部为字母组成,包括大写和小写字母和汉字 + * + * @param value 值 + * @return 是否全部为字母组成,包括大写和小写字母和汉字 + * @since 3.3.0 + */ + public static boolean isLetter(CharSequence value) { + return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher() { + @Override + public boolean match(Character t) { + return Character.isLetter(t); + } + }); + } + + /** + * 验证是否全部为字母组成,包括大写和小写字母和汉字 + * + * @param 字符串类型 + * @param value 表单值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + * @since 3.3.0 + */ + public static T validateLetter(T value, String errorMsg) throws ValidateException { + if (false == isLetter(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 判断字符串是否全部为大写字母 + * + * @param value 值 + * @return 是否全部为大写字母 + * @since 3.3.0 + */ + public static boolean isUpperCase(CharSequence value) { + return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher() { + @Override + public boolean match(Character t) { + return Character.isUpperCase(t); + } + }); + } + + /** + * 验证字符串是否全部为大写字母 + * + * @param 字符串类型 + * @param value 表单值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + * @since 3.3.0 + */ + public static T validateUpperCase(T value, String errorMsg) throws ValidateException { + if (false == isUpperCase(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 判断字符串是否全部为小写字母 + * + * @param value 值 + * @return 是否全部为小写字母 + * @since 3.3.0 + */ + public static boolean isLowerCase(CharSequence value) { + return StrUtil.isAllCharMatch(value, new cn.hutool.core.lang.Matcher() { + @Override + public boolean match(Character t) { + return Character.isLowerCase(t); + } + }); + } + + /** + * 验证字符串是否全部为小写字母 + * + * @param 字符串类型 + * @param value 表单值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + * @since 3.3.0 + */ + public static T validateLowerCase(T value, String errorMsg) throws ValidateException { + if (false == isLowerCase(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证该字符串是否是数字 + * + * @param value 字符串内容 + * @return 是否是数字 + */ + public static boolean isNumber(String value) { + return NumberUtil.isNumber(value); + } + + /** + * 验证是否为数字 + * + * @param value 表单值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static String validateNumber(String value, String errorMsg) throws ValidateException { + if (false == isNumber(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证该字符串是否是字母(包括大写和小写字母) + * + * @param value 字符串内容 + * @return 是否是字母(包括大写和小写字母) + * @since 4.1.8 + */ + public static boolean isWord(CharSequence value) { + return isMactchRegex(PatternPool.WORD, value); + } + + /** + * 验证是否为字母(包括大写和小写字母) + * + * @param 字符串类型 + * @param value 表单值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + * @since 4.1.8 + */ + public static T validateWord(T value, String errorMsg) throws ValidateException { + if (false == isWord(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为货币 + * + * @param value 值 + * @return 是否为货币 + */ + public static boolean isMoney(CharSequence value) { + return isMactchRegex(MONEY, value); + } + + /** + * 验证是否为货币 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateMoney(T value, String errorMsg) throws ValidateException { + if (false == isMoney(value)) { + throw new ValidateException(errorMsg); + } + return value; + + } + + /** + * 验证是否为邮政编码(中国) + * + * @param value 值 + * @return 是否为邮政编码(中国) + */ + public static boolean isZipCode(CharSequence value) { + return isMactchRegex(ZIP_CODE, value); + } + + /** + * 验证是否为邮政编码(中国) + * + * @param 字符串类型 + * @param value 表单值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateZipCode(T value, String errorMsg) throws ValidateException { + if (false == isZipCode(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为可用邮箱地址 + * + * @param value 值 + * @return 否为可用邮箱地址 + */ + public static boolean isEmail(CharSequence value) { + return isMactchRegex(EMAIL, value); + } + + /** + * 验证是否为可用邮箱地址 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateEmail(T value, String errorMsg) throws ValidateException { + if (false == isEmail(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为手机号码(中国) + * + * @param value 值 + * @return 是否为手机号码(中国) + */ + public static boolean isMobile(CharSequence value) { + return isMactchRegex(MOBILE, value); + } + + /** + * 验证是否为手机号码(中国) + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateMobile(T value, String errorMsg) throws ValidateException { + if (false == isMobile(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为身份证号码(18位中国)
+ * 出生日期只支持到到2999年 + * + * @param value 值 + * @return 是否为身份证号码(18位中国) + */ + public static boolean isCitizenId(CharSequence value) { + return isMactchRegex(CITIZEN_ID, value); + } + + /** + * 验证是否为身份证号码(18位中国)
+ * 出生日期只支持到到2999年 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateCitizenIdNumber(T value, String errorMsg) throws ValidateException { + if (false == isCitizenId(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为生日 + * + * @param year 年,从1900年开始计算 + * @param month 月,从1开始计数 + * @param day 日,从1开始计数 + * @return 是否为生日 + */ + public static boolean isBirthday(int year, int month, int day) { + // 验证年 + int thisYear = DateUtil.thisYear(); + if (year < 1900 || year > thisYear) { + return false; + } + + // 验证月 + if (month < 1 || month > 12) { + return false; + } + + // 验证日 + if (day < 1 || day > 31) { + return false; + } + if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) { + return false; + } + if (month == 2) { + if (day > 29 || (day == 29 && false == DateUtil.isLeapYear(year))) { + return false; + } + } + return true; + } + + /** + * 验证是否为生日
+ * 只支持以下几种格式: + *
    + *
  • yyyyMMdd
  • + *
  • yyyy-MM-dd
  • + *
  • yyyy/MM/dd
  • + *
  • yyyy.MM.dd
  • + *
  • yyyy年MM月dd日
  • + *
+ * + * @param value 值 + * @return 是否为生日 + */ + public static boolean isBirthday(CharSequence value) { + if (isMactchRegex(BIRTHDAY, value)) { + Matcher matcher = BIRTHDAY.matcher(value); + if (matcher.find()) { + int year = Integer.parseInt(matcher.group(1)); + int month = Integer.parseInt(matcher.group(3)); + int day = Integer.parseInt(matcher.group(5)); + return isBirthday(year, month, day); + } + } + return false; + } + + /** + * 验证验证是否为生日 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateBirthday(T value, String errorMsg) throws ValidateException { + if (false == isBirthday(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为IPV4地址 + * + * @param value 值 + * @return 是否为IPV4地址 + */ + public static boolean isIpv4(CharSequence value) { + return isMactchRegex(IPV4, value); + } + + /** + * 验证是否为IPV4地址 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateIpv4(T value, String errorMsg) throws ValidateException { + if (false == isIpv4(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为IPV6地址 + * + * @param value 值 + * @return 是否为IPV6地址 + */ + public static boolean isIpv6(CharSequence value) { + return isMactchRegex(IPV6, value); + } + + /** + * 验证是否为IPV6地址 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateIpv6(T value, String errorMsg) throws ValidateException { + if (false == isIpv6(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为MAC地址 + * + * @param value 值 + * @return 是否为MAC地址 + * @since 4.1.3 + */ + public static boolean isMac(CharSequence value) { + return isMactchRegex(PatternPool.MAC_ADDRESS, value); + } + + /** + * 验证是否为MAC地址 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + * @since 4.1.3 + */ + public static T validateMac(T value, String errorMsg) throws ValidateException { + if (false == isMac(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为中国车牌号 + * + * @param value 值 + * @return 是否为中国车牌号 + * @since 3.0.6 + */ + public static boolean isPlateNumber(CharSequence value) { + return isMactchRegex(PLATE_NUMBER, value); + } + + /** + * 验证是否为中国车牌号 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + * @since 3.0.6 + */ + public static T validatePlateNumber(T value, String errorMsg) throws ValidateException { + if (false == isPlateNumber(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为URL + * + * @param value 值 + * @return 是否为URL + */ + public static boolean isUrl(CharSequence value) { + try { + new java.net.URL(StrUtil.str(value)); + } catch (MalformedURLException e) { + return false; + } + return true; + } + + /** + * 验证是否为URL + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateUrl(T value, String errorMsg) throws ValidateException { + if (false == isUrl(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为汉字 + * + * @param value 值 + * @return 是否为汉字 + */ + public static boolean isChinese(CharSequence value) { + return isMactchRegex("^" + ReUtil.RE_CHINESE + "+$", value); + } + + /** + * 验证是否为汉字 + * + * @param 字符串类型 + * @param value 表单值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateChinese(T value, String errorMsg) throws ValidateException { + if (false == isChinese(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为中文字、英文字母、数字和下划线 + * + * @param value 值 + * @return 是否为中文字、英文字母、数字和下划线 + */ + public static boolean isGeneralWithChinese(CharSequence value) { + return isMactchRegex(GENERAL_WITH_CHINESE, value); + } + + /** + * 验证是否为中文字、英文字母、数字和下划线 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateGeneralWithChinese(T value, String errorMsg) throws ValidateException { + if (false == isGeneralWithChinese(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为UUID
+ * 包括带横线标准格式和不带横线的简单模式 + * + * @param value 值 + * @return 是否为UUID + */ + public static boolean isUUID(CharSequence value) { + return isMactchRegex(UUID, value) || isMactchRegex(UUID_SIMPLE, value); + } + + /** + * 验证是否为UUID
+ * 包括带横线标准格式和不带横线的简单模式 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + */ + public static T validateUUID(T value, String errorMsg) throws ValidateException { + if (false == isUUID(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 验证是否为Hex(16进制)字符串 + * + * @param value 值 + * @return 是否为Hex(16进制)字符串 + * @since 4.3.3 + */ + public static boolean isHex(CharSequence value) { + return isMactchRegex(PatternPool.HEX, value); + } + + /** + * 验证是否为Hex(16进制)字符串 + * + * @param 字符串类型 + * @param value 值 + * @param errorMsg 验证错误的信息 + * @return 验证后的值 + * @throws ValidateException 验证异常 + * @since 4.3.3 + */ + public static T validateHex(T value, String errorMsg) throws ValidateException { + if (false == isHex(value)) { + throw new ValidateException(errorMsg); + } + return value; + } + + /** + * 检查给定的数字是否在指定范围内 + * + * @param value 值 + * @param min 最小值(包含) + * @param max 最大值(包含) + * @return 是否满足 + * @since 4.1.10 + */ + public static boolean isBetween(Number value, Number min, Number max) { + Assert.notNull(value); + Assert.notNull(min); + Assert.notNull(max); + final double doubleValue = value.doubleValue(); + return (doubleValue >= min.doubleValue()) && (doubleValue <= max.doubleValue()); + } + + /** + * 检查给定的数字是否在指定范围内 + * + * @param value 值 + * @param min 最小值(包含) + * @param max 最大值(包含) + * @param errorMsg 验证错误的信息 + * @throws ValidateException 验证异常 + * @since 4.1.10 + */ + public static void validateBetween(Number value, Number min, Number max, String errorMsg) throws ValidateException { + if (false == isBetween(value, min, max)) { + throw new ValidateException(errorMsg); + } + } +}