用于目录路径格式验证的正则表达式
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[^\\/""<>|\u0000-\u001f]+)+
- 一个或多个目录分隔符重复,后跟一个或多个有效路径和目录分隔符,即除\
、/
、"
、<
、@987654337 以外的任何字符@、|
和控制 ASCII 字符
\1?
- 捕获到第 1 组的可选目录分隔符
$
- 字符串结束。
【讨论】:
谢谢@Wiktor 这就是我要找的东西!以上是关于用于目录路径格式验证的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
dd/mm/yyyy 格式的日期正则表达式,用于 javascript 验证
用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]