2012-08-23 61 views
0

我想的String.Empty替換這些字符:'"<>?*/\|在給定的文件名 如何做到這一點使用正則表達式 我已經試過這樣:C#正則表達式來驗證文件名

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

但這種替換所有特殊字符的String.Empty。

+2

http://mattgemmell.com/2008/12/08/what-have-you-tried/的 – walther

+0

可能重複[如何刪除非法字符從路徑和文件名?](http://stackoverflow.com/questions/146134/how-to-remove-illegal-characters-from-path-and-filenames) – Nasreddine

回答

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");