我需要在c#中验证文件夹名称。
我尝试过以下正则表达式:
^(.*?/|.*?\\)?([^\./|^\.\\]+)(?:\.([^\\]*)|)$
但它失败了,我也尝试使用GetInvalidPathChars()
。
当我尝试使用P:\abc
作为文件夹名称,即Driveletter:\foldername
任何人都可以建议为什么?
答案 0 :(得分:10)
你可以这样做(使用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)
答案 1 :(得分:0)
正确验证文件夹名称可能是一项艰巨的任务。请参阅我的博文Taking data binding, validation and MVVM to the next level - part 2 不要被标题所迷惑,它是关于验证文件系统路径,它说明了使用.Net框架中提供的方法所涉及的一些复杂性。虽然您可能想要使用正则表达式,但它并不是最可靠的工作方式。
答案 2 :(得分:-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();
}