Skip to main content
 首页 » 编程设计

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

2024年01月28日26txw1958

我想用字符串替换这些字符。空:'"<>?*/\|在给定的文件名中 如何使用 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");