!747 Validator工具类增加4个验证方法

Merge pull request !747 from hellozrh/v6-dev
This commit is contained in:
Looly 2022-08-09 13:45:42 +00:00 committed by Gitee
commit db6e806f9e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 111 additions and 0 deletions

View File

@ -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);
}
/**
* 是否是有效的统一社会信用代码
* <pre>
@ -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);
}
}
}

View File

@ -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("阿卜杜尼亚孜·毛力尼亚孜"));