用于文件路径的Java正则表达式

时间:2014-06-12 19:14:22

标签: java regex validation

我正在开发一个应用程序,用户需要提供本地文件位置或远程文件位置。我必须在这个文件位置做一些验证 以下是验证文件位置的要求。

路径不包含特殊字符* | " < > ?
像“c:”这样的路径也无效。

之类的路径
  • c:\
  • c:\newfolder
  • \\casdfhn\share

是有效的

  • c:
  • non
  • \\casfdhn

不是。

我已根据此要求实施了代码:

String FILE_LOCATION_PATTERN = "^(?:[\\w]\\:(\\[a-z_\\-\\s0-9\\.]+)*)";
String REMOTE_LOCATION_PATTERN = "\\\\[a-z_\\-\\s0-9\\.]+(\\[a-z_\\-\\s0-9\\.]+)+";

Pattern locationPattern = Pattern.compile(FILE_LOCATION_PATTERN);
Matcher locationMatcher = locationPattern.matcher(iAddress);
if (locationMatcher.matches()) {
    return true;
}

locationPattern = Pattern.compile(REMOTE_LOCATION_PATTERN);
locationMatcher = locationPattern.matcher(iAddress);

return locationMatcher.matches();

测试:

worklocation'        pass
'C:\dsrasr'          didnt pass  (but should pass)
'C:\saefase\are'     didnt pass  (but should pass)
'\\asfd\sadfasf'     didnt pass  (but should pass)
'\\asfdas'           didnt pass  (but should not pass)
'\\'                 didnt pass  (but should not pass)
'C:'                 passed infact should not pass

我尝试了许多正则表达但不满足要求。我正在寻求这个要求的帮助。

2 个答案:

答案 0 :(得分:4)

以下内容应该有效:

([A-Z|a-z]:\\[^*|"<>?\n]*)|(\\\\.*?\\.*)

以绿色和红色突出显示的行是通过的行。未突出显示的行失败。

请记住上面的正则表达式不会转义为java

enter image description here

答案 1 :(得分:1)

从您的限制看起来非常简单。

^(C:)?(\\[^\\"|^<>?\\s]*)+$

以C:\或斜杠^(C:)?\\

开头

除了([^\\"|^<>?\\s\\\])*

之外的其他特殊字符外,还可以有其他内容

并匹配整个路径$

编辑:似乎C:/和/只是例子。允许任何/任何事情使用此:

^([^\\"|^<>?\\s])*(\\[^\\"|^<>?\\s\\\]*)+$