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] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=97=E8=8A=82=E9=95=BF?= =?UTF-8?q?=E5=BA=A6=E9=AA=8C=E8=AF=81=EF=BC=8C=E5=BA=94=E5=AF=B9=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=AD=97=E8=8A=82=E9=95=BF=E5=BA=A6=E4=B8=8E?= =?UTF-8?q?java=E4=B8=B2=E9=95=BF=E5=BA=A6=E7=AE=97=E6=B3=95=E4=B8=8D?= =?UTF-8?q?=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("阿卜杜尼亚孜·毛力尼亚孜"));