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 368acb9a7..850ce1cdb 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java @@ -3,6 +3,7 @@ package cn.hutool.core.lang; import cn.hutool.core.date.DateUtil; import cn.hutool.core.exceptions.ValidateException; import cn.hutool.core.regex.PatternPool; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CreditCodeUtil; import cn.hutool.core.math.NumberUtil; import cn.hutool.core.util.ObjUtil; @@ -11,6 +12,8 @@ import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.IdcardUtil; import java.net.MalformedURLException; +import java.nio.charset.Charset; +import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1046,6 +1049,29 @@ public class Validator { } } + /** + * 检查给定的日期是否在指定范围内 + * + * @param value 值 + * @param start 最小值(包含) + * @param end 最大值(包含) + * @param errorMsg 验证错误的信息 + * @throws ValidateException 验证异常 + * @author ZRH 455741807@qq.com + */ + public static void validateBetween(final Date value, final Date start, final Date end, final String errorMsg) { + Assert.notNull(value); + Assert.notNull(start); + Assert.notNull(end); + int c1 = DateUtil.compare(value, start); + int c2 = DateUtil.compare(value, end); + + if(c1 >= 0 && c2 <= 0){ + return; + } + throw new ValidateException(errorMsg); + } + /** * 是否是有效的统一社会信用代码 *
@@ -1160,4 +1186,46 @@ public class Validator {
 		}
 		return value;
 	}
+
+	/**
+	 * 验证字符的长度是否符合要求
+	 * @param str      字符串
+	 * @param min      最小长度
+	 * @param max      最大长度
+	 * @param errorMsg 错误消息
+	 */
+	public static void validateLength(CharSequence str, int min, int max, String errorMsg) {
+		int len = StrUtil.length(str);
+		if (len < min || len > max) {
+			throw new ValidateException(errorMsg);
+		}
+	}
+
+	/**
+	 * 验证字符串的字节长度是否符合要求,默认采用"utf-8"编码
+	 *
+	 * @param str      字符串
+	 * @param min      最小长度
+	 * @param max      最大长度
+	 * @param errorMsg 错误消息
+	 */
+	public static void validateByteLength(CharSequence str, int min, int max, String errorMsg) {
+		validateByteLength(str, min, max, CharsetUtil.UTF_8, errorMsg);
+	}
+
+	/**
+	 * 验证字符串的字节长度是否符合要求
+	 *
+	 * @param str      字符串
+	 * @param min      最小长度
+	 * @param max      最大长度
+	 * @param charset  字符编码
+	 * @param errorMsg 错误消息
+	 */
+	public static void validateByteLength(CharSequence str, int min, int max, Charset charset, String errorMsg) {
+		int len = StrUtil.byteLength(str, charset);
+		if (len < min || len > max) {
+			throw new ValidateException(errorMsg);
+		}
+	}
 }
diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java
index 75fc1b53d..dab979e0a 100755
--- a/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java
@@ -1,11 +1,16 @@
 package cn.hutool.core.lang;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.exceptions.ValidateException;
 import cn.hutool.core.lang.id.IdUtil;
 import cn.hutool.core.regex.PatternPool;
+import cn.hutool.core.text.StrUtil;
+import cn.hutool.core.util.CharsetUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.util.Date;
+
 /**
  * 验证器单元测试
  *
@@ -248,6 +253,44 @@ public class ValidatorTest {
 		Assert.assertTrue(Validator.isMatchRegex(PatternPool.URL_HTTP, content));
 	}
 
+	@Test
+	public void validateBetweenTest(){
+		Date value = DateUtil.parse("2022-08-09 21:22:00");
+		final Date start = DateUtil.parse("2022-08-01 21:22:00");
+		final Date end = DateUtil.parse("2022-09-09 21:22:00");
+
+		Validator.validateBetween(value, start, end, "您选择的日期超出规定范围!");
+		Assert.assertTrue(true);
+
+		final Date value2 = DateUtil.parse("2023-08-09 21:22:00");
+		Assert.assertThrows(ValidateException.class, ()->
+				Validator.validateBetween(value2, start, end, "您选择的日期超出规定范围!")
+		);
+	}
+
+	@Test
+	public void validateLengthTest() {
+		String s1 = "abc";
+		Assert.assertThrows(ValidateException.class, ()->
+				Validator.validateLength(s1, 6, 8, "请输入6到8位的字符!"));
+	}
+
+	@Test
+	public void validateByteLengthTest() {
+		String s1 = "abc";
+		int len1 = StrUtil.byteLength(s1, CharsetUtil.UTF_8);
+		Assert.assertEquals(len1, 3);
+
+		String s2 = "我ab";
+		int len2 = StrUtil.byteLength(s2, CharsetUtil.UTF_8);
+		Assert.assertEquals(len2, 5);
+
+		//一个汉字在utf-8编码下,占3个字节。
+		Assert.assertThrows(ValidateException.class, ()->
+				Validator.validateByteLength(s2, 1, 3, "您输入的字符串长度超出限制!")
+		);
+	}
+
 	@Test
 	public void isChineseNameTest(){
 		Assert.assertTrue(Validator.isChineseName("阿卜杜尼亚孜·毛力尼亚孜"));