7

我需要在 c# 中验证文件夹名称。

我尝试了以下正则表达式:

 ^(.*?/|.*?\\)?([^\./|^\.\\]+)(?:\.([^\\]*)|)$

但它失败了,我也尝试使用GetInvalidPathChars().

当我尝试P:\abc用作文件夹名称时它失败了,即Driveletter:\foldername

谁能建议为什么?

4

3 回答 3

16

你可以这样做(使用System.IO.Path.InvalidPathChars常量):

bool IsValidFilename(string testName)
{
    Regex containsABadCharacter = new Regex("[" + Regex.Escape(System.IO.Path.InvalidPathChars) + "]");
    if (containsABadCharacter.IsMatch(testName) { return false; };

    // other checks for UNC, drive-path format, etc

    return true;
}

[编辑]
如果你想要一个验证文件夹路径的正则表达式,那么你可以使用这个:

Regex regex = new Regex("^([a-zA-Z]:)?(\\\\[^<>:\"/\\\\|?*]+)+\\\\?$");

[编辑 2]
我记得一件棘手的事情,它可以让您检查路径是否正确:

var invalidPathChars = Path.GetInvalidPathChars(path)

或(对于文件):

var invalidFileNameChars = Path.GetInvalidFileNameChars(fileName)

于 2012-10-02T11:00:32.060 回答
1

正确验证文件夹名称可能是一项艰巨的任务。请参阅我的博客文章将数据绑定、验证和 MVVM 提升到新的水平 - 第 2 部分
不要被标题所迷惑,它是关于验证文件系统路径的,它说明了使用 .Net 框架中提供的方法所涉及的一些复杂性。虽然您可能想要使用正则表达式,但这并不是完成这项工作的最可靠方法。

于 2012-10-02T11:13:41.483 回答
1

这是您应该使用的正则表达式:

Regex regex = new Regex("^([a-zA-Z0-9][^*/><?\"|:]*)$");
if (!regex.IsMatch(txtFolderName.Text))
{
    MessageBox.Show(this, "Folder fail", "info", MessageBoxButtons.OK, MessageBoxIcon.Information);
    metrotxtFolderName.Focus();
}
于 2013-12-17T08:28:54.333 回答