2012-10-25 93 views
1

我有一個擴展方法,它使用Regex.Replace清除用戶輸入的字符串中的無效字符,然後將其添加到XML文檔中。使用正則表達式來清理字符串與Base64編碼字符串

正則表達式的目的是去掉那些偶爾在輸入一些隨機HI-ASCII字符時從Microsoft Word用戶將文本粘貼,並用空格替換它們:

public static string CleanInput(this string inputString) { 
     if (string.IsNullOrEmpty(inputString)) 
      return string.Empty; 

     // Replace invalid characters with a space. 
     return Regex.Replace(inputString, @"[^\w\[email protected]]", " "); 
    } 

現在命運會擁有它,現在有人正在使用這種擴展方法在包含base64編碼數據的字符串上。

我相信正則表達式將會保留基本數據未修改的MOST,但是我認爲它可能會改變其中的一部分。

所以 - 明知\w在正則表達式是匹配[A-Za-z0-9_]和Base64的有效範圍相同,應該此正則表達式來改變字符串或不是?

如果它正在更改字符串,爲什麼以及如何更改它,以便hi-ASCII垃圾仍在常規非編碼文本中清理,而不會遺漏編碼字符串。

回答

1

Base64還使用+,/=

您可以添加這些到您的字符類:

[^\w\[email protected]+/=-] 

注意-必須是最後一個,以便它是連字符減去的文字,而不是指定一個範圍。

也可能值得考慮的是\w不一定與[A-Za-z0-9_]according to Microsoft相同。

+0

據我所知,@和 - 字符在Base64中是不可能的。並且=號只能在結束編碼的字符串的末尾(以填充字符串的長度,因此它將是4的倍數),所以也許這個唯一的字符可以作爲字符串尾字符單獨測試(s ):'(= +)$' –

+0

謝謝 - 這就是我需要知道的。 – Adrian

相關問題