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

Posted

技术标签:

【中文标题】用于目录路径格式验证的正则表达式【英文标题】:Regex for directory path format validation 【发布时间】:2021-06-17 09:56:15 【问题描述】:

我正在尝试构建一个正则表达式来验证目录路径,但我找不到这样做的好方法。 有人可以帮助我吗? 例子:

/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]+))*$

【问题讨论】:

这当然取决于所使用的操作系统和文件系统。 只测试双斜杠!(line.Contains("//") || line.contains("\\\\")) @KlausGütter 它在 Windows 上 @jdweng 我想要一个正则表达式来验证 为什么需要 RGEX。仅当无法使用普通字符串方法时才应使用正则表达式。正则表达式不是很有效。一个简单的 if 语句就足够了: if(!(line.Contains("//") || line.contains("\\\\")) ) 【参考方案1】:

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

由于string.Concat(System.IO.Path.GetInvalidPathChars()) (reference) 返回"\"<>|\0\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 = @"^(?=([/\\]))(?:\1[^\\/""<>|\u0000-\u001f]+)+\1?$";

请参阅regex demo。

详情

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

【讨论】:

谢谢@Wiktor 这就是我要找的东西!

以上是关于用于目录路径格式验证的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

用于验证 .NET 时间格式的正则表达式

用于验证 Netezza DB 中数据格式的正则表达式

dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证

用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]

正则表达式,用于验证不同格式的字符串,用于特殊时间转换[重复]

java 带要求的验证邮箱的正则表达式