Dan*_*Dan 21 .net c# regex windows
我目前正在寻找可以帮助验证文件路径的正则表达式,例如:
C:\test\test2\test.exe
Run Code Online (Sandbox Code Playgroud)
age*_*t-j 31
我决定发布这个使用正则表达式的答案.
^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$
Run Code Online (Sandbox Code Playgroud)
适用于这些:
\\test\test$\TEST.xls
\\server\share\folder\myfile.txt
\\server\share\myfile.txt
\\123.123.123.123\share\folder\myfile.txt
c:\folder\myfile.txt
c:\folder\myfileWithoutExtension
Run Code Online (Sandbox Code Playgroud)
编辑:添加了示例用法:
if (Regex.IsMatch (text, @"^(?:[a-zA-Z]\:|\\\\[\w\.]+\\[\w.$]+)\\(?:[\w]+\\)*\w([\w.])+$"))
{
// Valid
}
Run Code Online (Sandbox Code Playgroud)
*编辑:*这是您可以看到的路径的近似值.如果可能,最好使用Path类或FileInfo类来查看文件或文件夹是否存在.
Ree*_*sey 24
如果您的目标是使用文件名,我建议使用Path类而不是Regex.
例如,您可以调用Path.GetFullPath来"验证"路径,因为ArgumentException如果路径包含无效字符,它将引发一个路径,如果路径太长则会引发其他例外情况,等等.这将处理所有规则,使用正则表达式很难得到正确的结果.
mon*_*dev 10
这是Windows路径的正则表达式:
(^([a-z]|[A-Z]):(?=\\(?![\0-\37<>:"/\\|?*])|\/(?![\0-\37<>:"/\\|?*])|$)|^\\(?=[\\\/][^\0-\37<>:"/\\|?*]+)|^(?=(\\|\/)$)|^\.(?=(\\|\/)$)|^\.\.(?=(\\|\/)$)|^(?=(\\|\/)[^\0-\37<>:"/\\|?*]+)|^\.(?=(\\|\/)[^\0-\37<>:"/\\|?*]+)|^\.\.(?=(\\|\/)[^\0-\37<>:"/\\|?*]+))((\\|\/)[^\0-\37<>:"/\\|?*]+|(\\|\/)$)*()$
Run Code Online (Sandbox Code Playgroud)
这适用于UNIX/Linux路径
^\/$|(^(?=\/)|^\.|^\.\.)(\/(?=[^/\0])[^/\0]+)*\/?$
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
这些与Javascript一起使用
编辑 我添加了相对路径,(.. /,./,../something)
编辑2 我添加了以tilde为开头的路径,用于unix,(〜/,〜,〜/ something)
建议的一个不是很好,这是我为XSD构建的,它是Windows特定的:
^(?:[a-zA-Z]\:(\\|\/)|file\:\/\/|\\\\|\.(\/|\\))([^\\\/\:\*\?\<\>\"\|]+(\\|\/){0,1})+$
Run Code Online (Sandbox Code Playgroud)
我使用此正则表达式来捕获 Windows 中的有效文件/文件夹路径(包括 UNC 和 %variables%),但不包括“C:\”或“\\serverName”等根路径
^(([a-zA-Z]:|\\\\\w[ \w\.]*)(\\\w[ \w\.]*|\\%[ \w\.]+%+)+|%[ \w\.]+%(\\\w[ \w\.]*|\\%[ \w\.]+%+)*)
Run Code Online (Sandbox Code Playgroud)
此正则表达式与路径元素中的前导空格不匹配,因此
任何级别都允许变量