regex 验证文件夹名称

yhxst69z  于 2023-08-08  发布在  其他
关注(0)|答案(3)|浏览(68)

我需要在C#中验证文件夹名称。
我尝试了以下正则表达式:

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

字符串
但它失败了,我也尝试使用GetInvalidPathChars()
当我尝试使用P:\abc作为文件夹名称时失败,即Driveletter:\foldername
谁能告诉我为什么?

gev0vcfq

gev0vcfq1#

你可以这样做(使用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;
}

字符串

[edit]

如果你想要一个正则表达式来验证文件夹路径,那么你可以使用这个:
Regex regex = new Regex("^([a-zA-Z]:)?(\\\\[^<>:\"/\\\\|?*]+)+\\\\?$");

[edit 2]

我记得一个棘手的事情,让你检查路径是否正确:
var invalidPathChars = Path.GetInvalidPathChars(path)
或(对于文件):
var invalidFileNameChars = Path.GetInvalidFileNameChars(fileName)

vh0rcniy

vh0rcniy2#

正确验证文件夹名称可能是一项使命。我的博客Taking data binding, validation and MVVM to the next level - part 2
不要被标题所迷惑,它是关于验证文件系统路径的,它说明了使用.Net框架中提供的方法所涉及的一些复杂性。虽然您可能希望使用正则表达式,但这并不是完成这项工作的最可靠方法。

nzrxty8p

nzrxty8p3#

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

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

字符串

相关问题