1

Regex.ReplaceXML ドキュメントに追加される前に、ユーザーが入力した文字列内の無効な文字をクリーンアップするためにを使用する拡張メソッドがあります。

正規表現の目的は、ユーザーが 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\.@+/=-]

-範囲を指定するのではなく、リテラルのハイフンマイナスにするためには、最後にする必要があることに注意してください。

Microsoft によると\w必ずしも同じではないことも考慮する価値があるかもしれません。[A-Za-z0-9_]

于 2012-10-25T18:52:45.577 に答える