我目前正在寻找一个正则expression式,可以帮助validation文件path例如:
C:testtest2test.exe
Windows资源pipe理器在应用程序调用Web服务时不响应
等待networkingconfiguration在Windows服务启动完成
Windows Update API c#:设置下载位置
如何检测Windows 8操作系统使用C#4.0?
调用“运行”命令
我决定发表这个使用正则表达式的答案。
^(?:[a-zA-Z]:|\\[w.]+\[w.$]+)\(?:[w]+\)*w([w.])+$
适用于这些:
\testtest$TEST.xls \serversharefoldermyfile.txt \serversharemyfile.txt \123.123.123.123sharefoldermyfile.txt c:foldermyfile.txt c:foldermyfileWithoutExtension
if (Regex.IsMatch (text,@"^(?:[a-zA-Z]:|\\[w.]+\[w.$]+)\(?:[w]+\)*w([w.])+$")) { // Valid }
*编辑:*这是您可以看到的路径的近似值。 如果可能的话,最好使用Path类或FileInfo类来查看文件或文件夹是否存在。
如果你的目标是处理文件名,我会推荐使用Path类而不是Regex。
例如,您可以调用Path.GetFullPath来“验证”一个路径,因为如果路径包含无效字符,则会引发ArgumentException ,如果路径太长,则会引发其他异常。等等。这将处理所有规则,这将很难得到正确的正则表达式。
提议的不是很好,这是我为XSD构建的,它是Windows特有的:
^(?:[a-zA-Z]:(\|/)|file://|\\|.(/|\))([^\/:*?<>"|]+(\|/){0,1})+$
试试这个用于Windows和Linux的支持: ((?:[a-zA-Z]:){0,1}(?:[\/][w.]+){1,})
我使用这个正则表达式在windows(包括UNC和%变量%)中捕获有效的文件/文件夹路径,排除根路径如“C:”或“\ serverName”
^(([a-zA-Z]:|\\w[ w.]*)(\w[ w.]*|\%[ w.]+%+)+|%[ w.]+%(\w[ w.]*|\%[ w.]+%+)*)
这个正则表达式不匹配路径元素中的前导空格,所以
“C: program files”被匹配
“C: pathWithLeadingSpace”不匹配
变量在任何级别都是允许的
“%program files%”被匹配
“C:我的路径与内部空间%我var与内部空间%”匹配
regex CmdPrompt("^([AZ]:[^<>:"|?*]+>)");
基本上,我们查找不在禁止的Windows路径字符列表中的所有内容:
< (less than) > (greater than) : (colon) " (double quote) | (vertical bar or pipe) ? (question mark) * (asterisk)
这是Windows路径的正则表达式:
(^([az]|[AZ]):(?=\(?![ -37<>:"/\|?*])|/(?![ -37<>:"/\|?*])|$)|^\(?=[\/][^ -37<>:"/\|?*]+)|^(?=(\|/)$)|^.(?=(\|/)$)|^..(?=(\|/)$)|^(?=(\|/)[^ -37<>:"/\|?*]+)|^.(?=(\|/)[^ -37<>:"/\|?*]+)|^..(?=(\|/)[^ -37<>:"/\|?*]+))((\|/)[^ -37<>:"/\|?*]+|(\|/)$)*()$
这是为UNIX / Linux路径
^/$|(^(?=/)|^.|^..)(/(?=[^/ ])[^/ ]+)*/?$
这是我的测试:
Win Regex
Unix正则表达式
这些使用Javascript
编辑我已经添加了相对路径,(../,./,../something)
我发现这里的大部分答案都是一个小小的失误。
https://social.msdn.microsoft.com/forums/vstudio/en-US/31d2bc84-c948-4914-8a9d-97b9e788b341/validate-a-network-folder-path
注意* – 这只适用于网络共享 – 不是本地文件
回答:
string pattern = @"^\{2}[w-]+(\{1}(([w-][w-s]*[w-]+[$$]?)|([w-][$$]?$)))+"; string[] names = { @"\my-networksomelocation",@"\my-network\somelocation",@"\my-networksomelocation",@"my-networksomelocation",@"\my-networksomelocationaadd",@"\my-network\somelocation"}; foreach (string name in names) { if (Regex.IsMatch(name,pattern)) { Console.WriteLine(name); //Directory.Exists function to check if file exists } }
亚历山大的答案+相对路径
亚历山大迄今为止的答案是最正确的,因为它支持文件名中的空格(即C:Program Files (x86)将匹配)…这也包括相对路径。
例如,您可以执行cd /或cd 并执行相同的操作。
此外,如果您目前在C:somepathtosomeplace并且键入了其中的任何一个命令,则最终会在C:
更重要的是,你应该考虑以'/'开头的路径作为根路径(到当前驱动器)。
(?:[a-zA-Z]:(|/)|file://|\|.(/|)|/) ([^,/:*?<>"|]+(|/){0,1})
然而,亚历山大的答案的修改版本,我们包括相对路径,没有领先/或驱动器号,以及/没有前导驱动器号(相对于当前驱动器作为根)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。