我正在尝试使用正则表达式在c#中验证Windows路径。基于这个答案https://stackoverflow.com/a/24703223/4264336,我想出了一个允许驱动器号和unc路径使用的正则表达式,但是它似乎使空格阻塞。
功能:
public bool ValidatePath(string path)
{
Regex regex = new Regex(@"^(([a-zA-Z]:\\)|\\\\)(((?![<>:""/\\|? *]).)+((?<![ .])\\)?)*$");
return regex.IsMatch(path);
}
适用于我所有的测试用例,但文件名中空格除外:
[Test]
[TestCase(@"c:\", true)]
[TestCase(@"\\server\filename", true)]
[TestCase(@"\\server\filename with space", true)] //fails
[TestCase(@"\\server\filename\{token}\file", true)]
[TestCase(@"zzzzz", false)]
public void BadPathTest(string path, bool expected)
{
ValidatePath(path).Should().Be(expected);
}
如何获取文件名中的空格,我一辈子都看不到添加位置?
答案 0 :(得分:4)
您已经可以在.NET Framework中通过创建Uri并使用Uri.IsUnc property来做到这一点。
Uri uncPath = new Uri(@"\\my\unc\path");
Console.WriteLine(uncPath.IsUnc);
此外,您可以在reference source中看到该实现方式。
答案 1 :(得分:1)