用于目录路径格式验证的正则表达式

Regex for directory path format validation

我正在尝试构建一个正则表达式来验证目录路径,但我找不到执行该操作的好方法。 有人可以帮我吗? 示例:

/test/ -> could match
/test/toto/tata -> could match

\test\ -> could match
\test\toto\tata -> could match

//test/ -> could not match
\test\ -> could not match
/test//toto -> could not match
/test\tata -> could not match

编辑:我试过这个正则表达式,但它并不匹配所有情况。

^(\/{0,1}(?!\/))[A-Za-z0-9\/\-_]+(\.([a-zA-Z]+))*$

您似乎想要确保目录分隔符之间至少有一个字符,字符串只能以单个目录分隔符开头,并且可以选择以目录分隔符结尾。

作为 string.Concat(System.IO.Path.GetInvalidPathChars()) (reference) returns "\"<>|[=12=]\u0001\u0002\u0003\u0004\u0005\u0006\a\b\t\n\v\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f",您实际上可以将 [^"<>|\u0000-\u001f]+ 放在正则表达式中以匹配子文件夹名称并使用

var pattern = @"^(?=([/\]))(?:[^\/""<>|\u0000-\u001f]+)+?$";

参见regex demo

详情:

  • ^ - 字符串开头
  • (?=([/\])) - 下一个字符必须是 /\ 目录分隔符字符(捕获到 </code>)</li> <li><code>(?:[^\/""<>|\u0000-\u001f]+)+ - 一个或多个重复的目录分隔符,后跟一个或多个有效路径和目录分隔符,即 \/ 以外的任何字符, ", <, >, | 和控制ASCII字符
  • ? - 捕获到第 1 组的可选目录分隔符字符
  • $ - 字符串结尾。