From b8977ea1192f0216c8b4068e9569a35753ebd2fb Mon Sep 17 00:00:00 2001 From: hellozrh <455741807@qq.com> Date: Tue, 9 Aug 2022 15:20:37 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Validator=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=B8=A4=E4=B8=AA=E9=AA=8C=E8=AF=81=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/lang/Validator.java | 38 +++++++++++++++++++ .../cn/hutool/core/lang/ValidatorTest.java | 25 ++++++++++++ 2 files changed, 63 insertions(+) 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..43fbd1968 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 @@ -11,6 +11,7 @@ import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.IdcardUtil; import java.net.MalformedURLException; +import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1046,6 +1047,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 +1184,18 @@ 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); + } + } } 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..1148bb512 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,14 @@ 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 org.junit.Assert; import org.junit.Test; +import java.util.Date; + /** * 验证器单元测试 * @@ -248,6 +251,28 @@ 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 isChineseNameTest(){ Assert.assertTrue(Validator.isChineseName("阿卜杜尼亚孜·毛力尼亚孜")); From ad09bd41bb41cfde5a99d2dddcc9d8c97c1a81ef Mon Sep 17 00:00:00 2001 From: hellozrh <455741807@qq.com> Date: Tue, 9 Aug 2022 15:30:52 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=97=E8=8A=82?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=E9=AA=8C=E8=AF=81=EF=BC=8C=E5=BA=94=E5=AF=B9?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AD=97=E8=8A=82=E9=95=BF=E5=BA=A6?= =?UTF-8?q?=E4=B8=8Ejava=E4=B8=B2=E9=95=BF=E5=BA=A6=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/lang/Validator.java | 30 +++++++++++++++++++ .../cn/hutool/core/lang/ValidatorTest.java | 18 +++++++++++ 2 files changed, 48 insertions(+) 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 43fbd1968..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,7 @@ 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; @@ -1198,4 +1200,32 @@ public class Validator { 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 1148bb512..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 @@ -4,6 +4,8 @@ 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; @@ -273,6 +275,22 @@ public class ValidatorTest { 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("阿卜杜尼亚孜·毛力尼亚孜"));