我正在尝试使用正则表达式在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)
如何获取文件名中的空格,我一生都看不到在哪里添加它?
您已经可以通过创建Uri并使用Uri.IsUnc属性在.NET Framework中执行此操作。
Uri uncPath = new Uri(@"\\my\unc\path");
Console.WriteLine(uncPath.IsUnc);
Run Code Online (Sandbox Code Playgroud)
此外,您可以在参考源中看到如何实现这一点。