使用JAVA。我试图找到一种更优雅的方式来验证Linux文件夹路径(不包括文件名)。
到目前为止我所拥有的是:"^\\/$|^((\\/([a-zA-Z0-9_-]+))+)$"
文件夹路径应仅包含以下字符:字母,数字,短划线或下划线。
有效/匹配:
/
/abc
/abc/abc/abc/abc
无效/不匹配:
/abc/
/abc/abc/abc/abc/
您提供的RegEx正在处理测试用例。
您甚至可以通过删除反斜杠\\
和外部括号来减少它。开始^
和结束$
只需要一次(围绕两个选择)。
您可以测试RegEx on RegexPlanet.com(单击Java-Button进行测试)
^/|(/[a-zA-Z0-9_-]+)+$
或等效的(参见RegexPlanet上的演示)
^/|(/[\w-]+)+$
解释:\w
匹配word-character(与[a-zA-Z0-9_]
相同,不匹配破折号)。
public boolean isValidLinuxDirectory(String path) {
Pattern linuxDirectoryPattern = Pattern.compile("^/|(/[a-zA-Z0-9_-]+)+$");
return path != null && !path.trim().isEmpty() && linuxDirectoryPattern.matcher( path ).matches();
}
File
的替代解决方案返回:
true
当且仅当此抽象路径名表示的文件存在并且是目录时;false
否则
因此,如果在Linux机器上运行并且文件夹/目录存在,它可能只验证您的要求(有效的Linux文件夹)。
public boolean isValidExistingDirectory(String path) {
if (path == null || path.trim().isEmpty()) return false;
File file = new File( path );
return file.isDirectory();
}
如评论中所述,special form of root //
也应该有效。然后使用此RegEx:
^/|//|(/[\w-]+)+$
它支持:
/
//
/abc/123/_abc-123
)在这里你去:\/[a-zA-Z0-9_\/-]*[^\/]$
编辑
第一个字符匹配正斜杠/
。以下字符组匹配a-z,A-Z,0-9,下划线,正斜杠和短划线(所有接受的目录和文件名字符)。以下星号使模式匹配该字符组0次或更多次(因此这些字符的任何组合)。最后一个字符组有一个否定^
意味着它匹配任何东西除了字符组中的内容,是我们不想匹配的最后正斜杠。最后$
结束了字符串。