1

我有一个扩展方法,它Regex.Replace在将用户输入的字符串添加到 XML 文档之前使用它来清除用户输入的字符串中的无效字符。

正则表达式的目的是去除用户从 Microsoft Word 粘贴文本时偶尔出现在输入中的一些随机 hi-ASCII 字符,并用空格替换它们:

    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 数据保持不变,但我认为它可能会改变其中的一些。

所以 - 知道\w在正则表达式中是匹配的[A-Za-z0-9_]并且 Base64 实际上是相同的范围,这个正则表达式是否应该改变字符串?

如果它正在更改字符串,为什么以及如何更改它,以便仍然在常规非编码文本中清理 hi-ASCII 垃圾,而不会弄乱编码的字符串。

4

1 回答 1

1

Base64 还使用+/=.

您可以将这些添加到您的角色类中:

[^\w\.@+/=-]

请注意,-它必须是最后一个,才能成为文字连字符减号,而不是指定范围。

可能还值得考虑的\w是,这不一定与[A-Za-z0-9_] Microsoft 的说法相同。

于 2012-10-25T18:52:45.577 回答