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,8 +8,8 @@ import cn.hutool.core.lang.Validator;
/** /**
* 验证器单元测试 * 验证器单元测试
* @author Looly
* *
* @author Looly
*/ */
public class ValidatorTest { public class ValidatorTest {
@ -48,7 +48,7 @@ public class ValidatorTest {
} }
@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");
@ -71,13 +71,13 @@ public class ValidatorTest {
} }
@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", "内容中包含非中文");
} }
@ -116,4 +116,20 @@ public class ValidatorTest {
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);
}
} }