繁体   English   中英

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

[英]C# regex to validate filename

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

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

但这会将所有特殊字符替换为String.Empty。

您可以使用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");

看这里怎么做:

如何从路径和文件名中删除非法字符?

记得使用Path.GetInvalidFileNameChars()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM