/**
* 校验在 Microsoft Windows 中路径
* 路径必须遵循操作系统约定。在 Microsoft Windows 中,可使用以下的约定:
* 1、文件或目录名称可以有两部分:文件名和任选性的扩展名。两部分以圆点隔开,例如,myfile.new。
* 2、文件名可达255字符。实际上(win2000测试)文件的最大长度为216(218删除时出错),目录为206
* 3、文件名必须以字母或数字开头。它可以包含大小写字符
* (文件名不分大小写),但以下的字符除外:双引号(")、撇号(')、斜杠(/)、反斜杠(\)、冒号(:)、垂直条(|)。 4、文件名可以包含空格。
* 5、以下的名称将保留,且不能用在文件或目录上:CON、AUX、COM1、COM2、COM3、COM4、LPT1、LPT2、LPT3、PRN、NUL
* 。 也不能用使用以上名称+"."作为文件名的开头部分,如“CON.ABC.TXT”是不允许的。
*/
public static boolean isDirectory(String filePath) {
//^[a-zA-Z]:(?:\\(?! |\.|(?i:CON|AUX|COM[0-9]|LPT[1-9]|PRN|NUL)(?:[\.\\]|$))[^\\/:*?"<>|]{1,206})+(?<! )$
String winFileRegex = "^[a-zA-Z]:(?:\\\\(?! |\\.|(?i:CON|AUX|COM[0-9]|LPT[1-9]|PRN|NUL)(?:[\\.\\\\]|$))[^\\\\/:*?\"<>|]{1,206})+(?<! )$";
return Pattern.matches(winFileRegex, filePath);
}
其中(?<! )是校验路径末尾的空格
换成(?! )后校验失败 这两者有什么区别 这两个的原理又是什么呢
@windsun_ul
@╱―★神★―╲
* 校验在 Microsoft Windows 中路径
* 路径必须遵循操作系统约定。在 Microsoft Windows 中,可使用以下的约定:
* 1、文件或目录名称可以有两部分:文件名和任选性的扩展名。两部分以圆点隔开,例如,myfile.new。
* 2、文件名可达255字符。实际上(win2000测试)文件的最大长度为216(218删除时出错),目录为206
* 3、文件名必须以字母或数字开头。它可以包含大小写字符
* (文件名不分大小写),但以下的字符除外:双引号(")、撇号(')、斜杠(/)、反斜杠(\)、冒号(:)、垂直条(|)。 4、文件名可以包含空格。
* 5、以下的名称将保留,且不能用在文件或目录上:CON、AUX、COM1、COM2、COM3、COM4、LPT1、LPT2、LPT3、PRN、NUL
* 。 也不能用使用以上名称+"."作为文件名的开头部分,如“CON.ABC.TXT”是不允许的。
*/
public static boolean isDirectory(String filePath) {
//^[a-zA-Z]:(?:\\(?! |\.|(?i:CON|AUX|COM[0-9]|LPT[1-9]|PRN|NUL)(?:[\.\\]|$))[^\\/:*?"<>|]{1,206})+(?<! )$
String winFileRegex = "^[a-zA-Z]:(?:\\\\(?! |\\.|(?i:CON|AUX|COM[0-9]|LPT[1-9]|PRN|NUL)(?:[\\.\\\\]|$))[^\\\\/:*?\"<>|]{1,206})+(?<! )$";
return Pattern.matches(winFileRegex, filePath);
}
其中(?<! )是校验路径末尾的空格
换成(?! )后校验失败 这两者有什么区别 这两个的原理又是什么呢
@windsun_ul
@╱―★神★―╲