我将使用正则表达式在C#中验证Windows路径。根据这个答案https://dev59.com/9oHba4cB1Zd3GeqPRXEL#24703223,我已经想出了一个允许驱动器字母和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);
}
如何让文件名中允许空格?我无论如何都找不到添加的地方。
^(?:[a-zA-Z]:\\|\\\\)(?>[^\r\n<>:"/\\|?*]+(?:(?<![\s.])\\)?)+$
](http://regexstorm.net/tester?p=%5e%28%3f%3a%5ba-zA-Z%5d%3a%5c%5c%7c%5c%5c%5c%5c%29%28%3f%3e%5b%5e%5cr%5cn%3c%3e%3a%22%2f%5c%5c%7c%3f*%5d%2b%28%3f%3a%28%3f%3c!%5b%5cs.%5d%29%5c%5c%29%3f%29%2b%5cr%3f%24&i=c%3a%5c%0d%0a%5c%5cserver%5cfilename%0d%0a%5c%5cserver%5cfilename+with+space%0d%0a%5c%5cserver%5cfilename%5c%7btoken%7d%5cfile%0d%0a%0d%0azzzzz%0d%0a&o=m]。但仍要使用正确的工具。 - Wiktor Stribiżew