normalize support samba path

This commit is contained in:
Looly 2019-09-19 17:31:39 +08:00
parent a8e9de0ffb
commit 30d26ab22d
5 changed files with 48 additions and 22 deletions

View File

@ -11,6 +11,7 @@
* 【core】 TimeInterval增加intervalPretty方法issue#I12A6T@Gitee * 【core】 TimeInterval增加intervalPretty方法issue#I12A6T@Gitee
* 【core】 改进ArrayUtil.toString提高性能 * 【core】 改进ArrayUtil.toString提高性能
* 【system】 增加SystemPropsKeysissue#550@Github * 【system】 增加SystemPropsKeysissue#550@Github
* 【core】 FileUtil.normalize在win下支持samba路径issue#549@Github
### Bug修复 ### Bug修复
* 【core】 修复DateUtil.offset导致的时区错误问题issue#I1294O@Gitee * 【core】 修复DateUtil.offset导致的时区错误问题issue#I1294O@Gitee
@ -18,6 +19,7 @@
* 【db】 修复StatementUtil.getGeneratedKeys返回主键数量不足问题 * 【db】 修复StatementUtil.getGeneratedKeys返回主键数量不足问题
* 【db】 修复锁的问题issue#546@Github * 【db】 修复锁的问题issue#546@Github
* 【db】 修复CombinationAnnotationElement问题issue#547@Github * 【db】 修复CombinationAnnotationElement问题issue#547@Github
* 【core】 修复Validator.isGeneral问题
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------

View File

@ -48,6 +48,7 @@ import cn.hutool.core.io.file.LineSeparator;
import cn.hutool.core.io.file.Tailer; import cn.hutool.core.io.file.Tailer;
import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
@ -1576,15 +1577,20 @@ public class FileUtil {
return null; return null;
} }
// 兼容Spring风格的ClassPath路径去除前缀不区分大小写 // 兼容Spring风格的ClassPath路径去除前缀不区分大小写
String pathToUse = StrUtil.removePrefixIgnoreCase(path, URLUtil.CLASSPATH_URL_PREFIX); String pathToUse = StrUtil.removePrefixIgnoreCase(path, URLUtil.CLASSPATH_URL_PREFIX);
// 去除file:前缀 // 去除file:前缀
pathToUse = StrUtil.removePrefixIgnoreCase(pathToUse, URLUtil.FILE_URL_PREFIX); pathToUse = StrUtil.removePrefixIgnoreCase(pathToUse, URLUtil.FILE_URL_PREFIX);
// 统一使用斜杠 // 统一使用斜杠
pathToUse = pathToUse.replaceAll("[/\\\\]{1,}", StrUtil.SLASH).trim(); pathToUse = pathToUse.replaceAll("[/\\\\]{1,}", StrUtil.SLASH).trim();
//兼容Windows下的共享目录路径原始路径如果以\\开头则保留这种路径
if(path.startsWith("\\\\")){
pathToUse = "\\" + pathToUse;
}
int prefixIndex = pathToUse.indexOf(StrUtil.COLON);
String prefix = ""; String prefix = "";
int prefixIndex = pathToUse.indexOf(StrUtil.COLON);
if (prefixIndex > -1) { if (prefixIndex > -1) {
// 可能Windows风格路径 // 可能Windows风格路径
prefix = pathToUse.substring(0, prefixIndex + 1); prefix = pathToUse.substring(0, prefixIndex + 1);

View File

@ -371,10 +371,10 @@ public class Validator {
* @return 是否为给定长度范围的英文字母 数字和下划线 * @return 是否为给定长度范围的英文字母 数字和下划线
*/ */
public static boolean isGeneral(CharSequence value, int min, int max) { public static boolean isGeneral(CharSequence value, int min, int max) {
String reg = "^\\w{" + min + "," + max + "}$";
if (min < 0) { if (min < 0) {
min = 0; min = 0;
} }
String reg = "^\\w{" + min + "," + max + "}$";
if (max <= 0) { if (max <= 0) {
reg = "^\\w{" + min + ",}$"; reg = "^\\w{" + min + ",}$";
} }

View File

@ -136,6 +136,8 @@ public class FileUtilTest {
Assert.assertEquals("bar", FileUtil.normalize("~/../bar")); Assert.assertEquals("bar", FileUtil.normalize("~/../bar"));
Assert.assertEquals("bar", FileUtil.normalize("../../bar")); Assert.assertEquals("bar", FileUtil.normalize("../../bar"));
Assert.assertEquals("C:/bar", FileUtil.normalize("/C:/bar")); Assert.assertEquals("C:/bar", FileUtil.normalize("/C:/bar"));
Assert.assertEquals("\\/192.168.1.1/Share/", FileUtil.normalize("\\\\192.168.1.1\\Share\\"));
} }
@Test @Test

View File

@ -8,11 +8,11 @@ import cn.hutool.core.lang.Validator;
/** /**
* 验证器单元测试 * 验证器单元测试
* @author Looly
* *
* @author Looly
*/ */
public class ValidatorTest { public class ValidatorTest {
@Test @Test
public void isNumberTest() { public void isNumberTest() {
Assert.assertTrue(Validator.isNumber("45345365465")); Assert.assertTrue(Validator.isNumber("45345365465"));
@ -20,35 +20,35 @@ public class ValidatorTest {
Assert.assertTrue(Validator.isNumber("5.222")); Assert.assertTrue(Validator.isNumber("5.222"));
Assert.assertTrue(Validator.isNumber("0.33323")); Assert.assertTrue(Validator.isNumber("0.33323"));
} }
@Test @Test
public void isLetterTest() { public void isLetterTest() {
Assert.assertTrue(Validator.isLetter("asfdsdsfds")); Assert.assertTrue(Validator.isLetter("asfdsdsfds"));
Assert.assertTrue(Validator.isLetter("asfdsdfdsfVCDFDFGdsfds")); Assert.assertTrue(Validator.isLetter("asfdsdfdsfVCDFDFGdsfds"));
Assert.assertTrue(Validator.isLetter("asfdsdf你好dsfVCDFDFGdsfds")); Assert.assertTrue(Validator.isLetter("asfdsdf你好dsfVCDFDFGdsfds"));
} }
@Test @Test
public void isUperCaseTest() { public void isUperCaseTest() {
Assert.assertTrue(Validator.isUpperCase("VCDFDFG")); Assert.assertTrue(Validator.isUpperCase("VCDFDFG"));
Assert.assertTrue(Validator.isUpperCase("ASSFD")); Assert.assertTrue(Validator.isUpperCase("ASSFD"));
Assert.assertFalse(Validator.isUpperCase("asfdsdsfds")); Assert.assertFalse(Validator.isUpperCase("asfdsdsfds"));
Assert.assertFalse(Validator.isUpperCase("ASSFD你好")); Assert.assertFalse(Validator.isUpperCase("ASSFD你好"));
} }
@Test @Test
public void isLowerCaseTest() { public void isLowerCaseTest() {
Assert.assertTrue(Validator.isLowerCase("asfdsdsfds")); Assert.assertTrue(Validator.isLowerCase("asfdsdsfds"));
Assert.assertFalse(Validator.isLowerCase("aaaa你好")); Assert.assertFalse(Validator.isLowerCase("aaaa你好"));
Assert.assertFalse(Validator.isLowerCase("VCDFDFG")); Assert.assertFalse(Validator.isLowerCase("VCDFDFG"));
Assert.assertFalse(Validator.isLowerCase("ASSFD")); Assert.assertFalse(Validator.isLowerCase("ASSFD"));
Assert.assertFalse(Validator.isLowerCase("ASSFD你好")); Assert.assertFalse(Validator.isLowerCase("ASSFD你好"));
} }
@Test @Test
public void isBirthdayTest(){ public void isBirthdayTest() {
boolean b = Validator.isBirthday("20150101"); boolean b = Validator.isBirthday("20150101");
Assert.assertTrue(b); Assert.assertTrue(b);
boolean b2 = Validator.isBirthday("2015-01-01"); boolean b2 = Validator.isBirthday("2015-01-01");
@ -61,7 +61,7 @@ public class ValidatorTest {
Assert.assertTrue(b5); Assert.assertTrue(b5);
boolean b6 = Validator.isBirthday("2018-08-15"); boolean b6 = Validator.isBirthday("2018-08-15");
Assert.assertTrue(b6); Assert.assertTrue(b6);
//验证年非法 //验证年非法
Assert.assertFalse(Validator.isBirthday("2095.05.01")); Assert.assertFalse(Validator.isBirthday("2095.05.01"));
//验证月非法 //验证月非法
@ -69,18 +69,18 @@ public class ValidatorTest {
//验证日非法 //验证日非法
Assert.assertFalse(Validator.isBirthday("2015.02.29")); Assert.assertFalse(Validator.isBirthday("2015.02.29"));
} }
@Test @Test
public void isCitizenIdTest(){ public void isCitizenIdTest() {
boolean b = Validator.isCitizenId("150218199012123389"); boolean b = Validator.isCitizenId("150218199012123389");
Assert.assertTrue(b); Assert.assertTrue(b);
} }
@Test(expected=ValidateException.class) @Test(expected = ValidateException.class)
public void validateTest() throws ValidateException{ public void validateTest() throws ValidateException {
Validator.validateChinese("我是一段zhongwen", "内容中包含非中文"); Validator.validateChinese("我是一段zhongwen", "内容中包含非中文");
} }
@Test @Test
public void isEmailTest() { public void isEmailTest() {
boolean email = Validator.isEmail("abc_cde@163.com"); boolean email = Validator.isEmail("abc_cde@163.com");
@ -94,7 +94,7 @@ public class ValidatorTest {
boolean email4 = Validator.isEmail("xiaolei.Lu@aaa.b"); boolean email4 = Validator.isEmail("xiaolei.Lu@aaa.b");
Assert.assertTrue(email4); Assert.assertTrue(email4);
} }
@Test @Test
public void isMobileTest() { public void isMobileTest() {
boolean m1 = Validator.isMobile("13900221432"); boolean m1 = Validator.isMobile("13900221432");
@ -104,16 +104,32 @@ public class ValidatorTest {
boolean m3 = Validator.isMobile("+8618600221432"); boolean m3 = Validator.isMobile("+8618600221432");
Assert.assertTrue(m3); Assert.assertTrue(m3);
} }
@Test @Test
public void isMatchTest() { public void isMatchTest() {
String url = "http://aaa-bbb.somthing.com/a.php?a=b&c=2"; String url = "http://aaa-bbb.somthing.com/a.php?a=b&c=2";
Assert.assertTrue(Validator.isMactchRegex(PatternPool.URL_HTTP, url)); Assert.assertTrue(Validator.isMactchRegex(PatternPool.URL_HTTP, url));
url = "https://aaa-bbb.somthing.com/a.php?a=b&c=2"; url = "https://aaa-bbb.somthing.com/a.php?a=b&c=2";
Assert.assertTrue(Validator.isMactchRegex(PatternPool.URL_HTTP, url)); Assert.assertTrue(Validator.isMactchRegex(PatternPool.URL_HTTP, url));
url = "https://aaa-bbb.somthing.com:8080/a.php?a=b&c=2"; url = "https://aaa-bbb.somthing.com:8080/a.php?a=b&c=2";
Assert.assertTrue(Validator.isMactchRegex(PatternPool.URL_HTTP, url)); Assert.assertTrue(Validator.isMactchRegex(PatternPool.URL_HTTP, url));
} }
@Test
public void isGeneralTest() {
String str = "";
boolean general = Validator.isGeneral(str, -1, 5);
Assert.assertTrue(general);
str = "123_abc_ccc";
general = Validator.isGeneral(str, -1, 100);
Assert.assertTrue(general);
// 不允许中文
str = "123_abc_ccc中文";
general = Validator.isGeneral(str, -1, 100);
Assert.assertFalse(general);
}
} }