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

时间:2018-07-12 12:16:11

标签: 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);
    }

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

    [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);
    }

如何获取文件名中的空格,我一辈子都看不到添加位置?

2 个答案:

答案 0 :(得分:4)

您已经可以在.NET Framework中通过创建Uri并使用Uri.IsUnc property来做到这一点。

Uri uncPath =  new Uri(@"\\my\unc\path");
Console.WriteLine(uncPath.IsUnc);

此外,您可以在reference source中看到该实现方式。

答案 1 :(得分:1)

Windows不允许使用几个字符:

enter image description here

在此处指定:Microsoft Docs: Naming Files, Paths, and Namespaces

这是UNC的排除基础正则表达式

as