使用 JAVA。 我正在尝试寻找一种更优雅的方法来验证 Linux 文件夹路径(不包括文件名)。
我到目前为止是这样的:"^\\/$|^((\\/([a-zA-Z0-9_-]+))+)$"
文件夹路径应仅包含以下字符:字母、数字、破折号或下划线。
测试用例
有效/匹配:
/
/abc
/abc/abc/abc/abc
无效/不匹配:
- null 或空字符串
/abc/
/abc/abc/abc/abc/
最佳答案
你的 RegEx 问题
您提供的 RegEx 正在处理测试用例。
您可以通过删除反斜杠 \\
和外括号来甚至减少它。 Begin ^
和 end $
只需要一次(围绕两个备选方案)。
使用正则表达式的可能解决方案
您可以测试 RegEx on RegexPlanet.com (点击 Java 按钮进行测试)
^/|(/[a-zA-Z0-9_-]+)+$
或等效(参见 RegexPlanet 上的演示)
^/|(/[\w-]+)+$
解释:
\w
匹配 word-character (与 [a-zA-Z0-9_]
相同,不匹配 破折号)。
Java代码实现:
public boolean isValidLinuxDirectory(String path) {
Pattern linuxDirectoryPattern = Pattern.compile("^/|(/[a-zA-Z0-9_-]+)+$");
return path != null && !path.trim().isEmpty() && linuxDirectoryPattern.matcher( path ).matches();
}
使用文件
的替代解决方案
Returns:
true
if and only if the file denoted by this abstract pathname exists and is a directory;false
otherwise
因此,如果在 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 //
也应该有效。然后使用这个正则表达式:
^/|//|(/[\w-]+)+$
它支持:
- 根目录
/
- 特殊形式的根目录
//
- 任何非根目录,其名称由字母、数字、破折号或下划线组成(例如
/abc/123/_abc-123
)
另见
关于java - 用于验证 Linux 文件夹路径的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55069650/