从文件名和/或文件夹名称中移除非法字符






4.80/5 (2投票s)
一个简单的正则表达式,用于替换所有非法的文件名或路径字符
引言
当你需要检查一个新文件夹或文件的名称时,你会执行一个验证函数。这个函数的实现方式可能因开发者而异。
我们大多数人会简单地编写一个函数来移除非法字符,例如 < > : " / \ | ? * (在Windows上),将这些字符替换为空字符串,例如:
Str = Str.Replace("<", "");
然而,你遗漏了很多不常见的非法字符(其中许多你甚至在键盘上找不到[即使在中国!]),而且这些字符可能会随着时间而变化(尽管可能性不大)。 想法是使用 .NET 提供的 `Path` 类的非法字符,并使用正则表达式进行替换。
代码
如下所示
public static string FixedStr(string Str)
{
// This regex will include illegal chars you never dreamed of
string illegalCharsPattern = new string(Path.GetInvalidFileNameChars())
+ new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(illegalCharsPattern)));
return r.Replace(Str, "");
}
注意: 这不适用于需要 SFN 8.3 文件名要求的旧系统(如 FAT),也不适用于文件名和一些特殊的 UNIX 系统(尽管 UNIX 通常允许大多数字符)。