質問
これが何もしないのはなぜですか、出力は入力と同じですか?私は困惑しています!!!
string name = ";;;'']][[ zion \\\[[[]]]"
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
解決
編集:
(他の人が提案した機能変更に加えて)テストデータが不完全な場合もあると思います。これを試してください:
string name = "tru\\e.jpg";
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);
<!> quot; true.jpg <!> quot;出力。これを本番環境で使用する前に、もっと多くのテストを行うことをお勧めします! :)
他のヒント
無効なファイル文字を取得するには、
char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();
何もしないのはどういう意味ですか?コンソールアプリケーションで次を実行しました。
string name = ";;;'']][[ zion \\\\[[[]]]";
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);
構文が間違っていたため、エスケープされていない文字がいくつかあり、セミコロンが欠落していました。
そして、私は次の結果を得ました。
;;;'']][[ zion \\[[[]]]
これは正しい結果です。あなたの現在のアプローチは、正規表現を十分に理解していないことを示していると思われるので、何をしようとしているかについて新しい質問をする必要があるかもしれません。
更新: ファイル名を確認しようとしていますか?もしそうなら、おそらくあなたが使用したい:
System.IO.Path.GetInvalidFileNameChars();
更新:
そのメソッドに由来する無効な文字のリストは次のとおりですGetInvalidPathChars()
RealInvalidPathChars = new char[] {
'"', '<', '>', '|', '\0', '\x0001', '\x0002', '\x0003', '\x0004', '\x0005', '\x0006', '\a', '\b', '\t', '\n', '\v',
'\f', '\r', '\x000e', '\x000f', '\x0010', '\x0011', '\x0012', '\x0013', '\x0014', '\x0015', '\x0016', '\x0017', '\x0018', '\x0019', '\x001a', '\x001b',
'\x001c', '\x001d', '\x001e', '\x001f'
};
したがって、基本的に無効なパス文字はASCII / Unicode文字1から31、引用符(<!> quot;)、より小さい(<!> lt;)、より大きい(<!> gtを含む可能性があります;)、パイプ(|)、バックスペース(\ b)、null(\ 0)、タブ(\ t)。
元の文字列に含まれていると思われるものはありません。
所属していません StackOverflow