C#正则表达式验证文件名

时间:2012-08-23 09:57:28

标签: c# regex

我想用给定文件名中的string.Empty:'"<>?*/\|替换这些字符 如何使用Regex做到这一点 我试过这个:

Regex r = new Regex("(?:[^a-z0-9.]|(?<=['\"]))", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
                 FileName = r.Replace(FileName, String.Empty);

但是这会用String.Empty替换所有特殊字符。

2 个答案:

答案 0 :(得分:3)

您可以使用Regex.Replace方法。它就像它的名字所暗示的那样。

Regex regex = new Regex(@"[\\'\\""\\<\\>\\?\\*\\/\\\\\|]");
var filename = "dfgdfg'\"<>?*/\\|dfdf";
filename = regex.Replace(filename, string.Empty);

但是我宁愿为你当前正在使用的文件系统中的文件名中禁止的所有字符清理它,而不仅仅是你在你的正则表达式中定义的字符,因为你可能忘记了一些东西:

private static readonly char[] InvalidfilenameCharacters = Path.GetInvalidFileNameChars();

public static string SanitizeFileName(string filename)
{
    return new string(
        filename
            .Where(x => !InvalidfilenameCharacters.Contains(x))
            .ToArray()
    );
}

然后:

var filename = SanitizeFileName("dfgdfg'\"<>?*/\\|dfdf");

答案 1 :(得分:2)

看这里怎么做:

How to remove illegal characters from path and filenames?

记得使用Path.GetInvalidFileNameChars()