65.9K
CodeProject 正在变化。 阅读更多。
Home

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

2013年2月21日

CPOL
viewsIcon

16777

一个简单的正则表达式,用于替换所有非法的文件名或路径字符

引言

当你需要检查一个新文件夹或文件的名称时,你会执行一个验证函数。这个函数的实现方式可能因开发者而异。

我们大多数人会简单地编写一个函数来移除非法字符,例如 < > : " / \ | ? * (在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 通常允许大多数字符)。

© . All rights reserved.