afr*_*rey 5 java regex linux validation filepath
使用JAVA。我试图找到一种更优雅的方式来验证 Linux 文件夹路径(不包括文件名)。
到目前为止,我所拥有的是: "^\\/$|^((\\/([a-zA-Z0-9_-]+))+)$"
文件夹路径应仅包含以下字符:字母、数字、破折号或下划线。
有效/匹配:
//abc/abc/abc/abc/abc无效/不匹配:
/abc//abc/abc/abc/abc/您提供的 RegEx 正在处理测试用例。
您甚至可以通过删除反斜杠\\和外部括号来减少它。开始^和结束$只需要一次(围绕两个选择)。
您可以在 RegexPlanet.com 上测试 RegEx (单击 Java-Button 进行测试)
^/|(/[a-zA-Z0-9_-]+)+$
Run Code Online (Sandbox Code Playgroud)
或等价物(参见RegexPlanet 上的演示)
^/|(/[\w-]+)+$
Run Code Online (Sandbox Code Playgroud)
解释:
\w匹配一个单词字符(与 相同[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();
}
Run Code Online (Sandbox Code Playgroud)
File请注意isDirectory() 上的文档:
返回:
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();
}
Run Code Online (Sandbox Code Playgroud)
如评论中所述,根 的特殊形式//也应该有效。然后使用这个正则表达式:
^/|//|(/[\w-]+)+$
Run Code Online (Sandbox Code Playgroud)
它支持:
////abc/123/_abc-123)