正则表达式以验证Windows UNC路径

Lob*_*nts 4 c# regex

我正在尝试使用正则表达式在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);
    }
Run Code Online (Sandbox Code Playgroud)

它适用于我所有的测试用例,但文件名中空格除外:

    [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);
    }
Run Code Online (Sandbox Code Playgroud)

如何获取文件名中的空格,我一生都看不到在哪里添加它?

Owe*_*ing 5

您已经可以通过创建Uri并使用Uri.IsUnc属性在.NET Framework中执行此操作。

Uri uncPath =  new Uri(@"\\my\unc\path");
Console.WriteLine(uncPath.IsUnc);
Run Code Online (Sandbox Code Playgroud)

此外,您可以在参考源中看到如何实现这一点。