文字列内の有効/許容される文字を制限する必要があります。与えられたルールは次のとおりです。
- スペースはアンダースコアに置き換えられます
- 長さは 256 に制限されています (コンパイラの制限)
- ASCII コード 32 (スペース) と 126 (~) の間でなければなりません。
- 次のいずれも含めることはできません。
- : (コロン)
- ; (セミコロン)
- 、 (コンマ)
- ' (一重引用符)
- " (二重引用符)
- \t (タブ)
- \n (改行)
- \r (キャリッジ リターン)
- \\ (バックスラッシュ)
上記の規則を満たさないものはすべて、アンダースコアに置き換える必要があります。(長さの規則は、RegEx に同様に対処するものがない限り、最後に単純にトリミングできます。)
これで、たとえば英数字に対してこのようなクラスを作成することで、許容される文字を記述する方法がわかりました...
[a-zA-Z0-9]
...次に、このような Replace 呼び出しでその逆を使用します (先頭のカラットに注意してください)...
var cleanedString = RegEx.Replace(sourceString, "[^a-zA-Z0-9]", replacementString);
...しかし、範囲 (「' ' と '~' の間でなければならない」条件) と具体的に除外された文字の両方を処理するにはどうすればよいですか? このように「OR」演算として実行しますか?
var cleanedString = RegEx.Replace(sourceString, @"[^ -~]|[;:,'""\t\n\r\\]", replacementString);
注: それが ' ' (スペース) と '~' の間の範囲の開始方法ですか? どうにかしてスペースを明示的にエスケープする必要があるかどうかはわかりません。
より一般的には、質問のタイトルが尋ねるように、ルールは32を超えなければならないが、上限はなかったと言います。このような無制限の範囲をどのように指定できますか?