我有一个扩展方法,它使用Regex.Replace
清除用户输入的字符串中的无效字符,然后再将其添加到XML文档中。
正则表达式的目的是去掉一些随机的高位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\.@-]", " ");
}
现在命运如此,有人正在对包含base64编码数据的字符串使用此扩展方法。
我认为正则表达式会使base64数据的 MOST 保持不变,但我认为它可能正在改变其中一些。
那么 - 知道正则表达式中的\w
匹配[A-Za-z0-9_]
并且Base64实际上是相同的范围,应该这个正则表达式是否正在改变字符串?
如果它正在更改字符串,为什么以及如何更改字符串,以便仍然可以在常规非编码文本中清除hi-ASCII垃圾,而不会弄乱编码的字符串。
答案 0 :(得分:1)
Base64还使用+
,/
和=
。
您可以将这些添加到角色类:
[^\w\.@+/=-]
请注意-
必须是最后一个才能使它成为文字连字符 - 而不是指定范围。
值得考虑的是,\w
不一定与[A-Za-z0-9_]
according to Microsoft相同。