Pergunta

Por que não vai este fazer qualquer coisa, a saída é idêntico ao de entrada? Estou perplexo !!!

string name = ";;;'']][[ zion \\\[[[]]]"  
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));

string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Foi útil?

Solução

EDIT:

Eu acho que pode ser apenas um caso de dados de teste imperfeito (junto com a mudança de função que já foi sugerido). Tente isto:

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);

Eu recebo saída "true.jpg". Eu definitivamente sugerem muito mais testes antes de usar este na produção! :)

Outras dicas

Get caracteres de arquivos inválidos usando,

char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();

O que você quer dizer com isso não vai fazer nada? Eu corri o seguinte em um aplicativo de console:

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);

A propósito sua sintaxe estava errado, você tinha alguns personagens unescaped e que estava faltando um ponto e vírgula.

E eu tenho o seguinte resultado.

;;;'']][[ zion \\[[[]]]

Qual é o resultado correto. Talvez você deve fazer uma nova pergunta sobre o que você está tentando fazer, porque a sua abordagem atual parece indicar que você não tem uma forte compreensão de Regex.

Atualizar : Você está tentando verificar os nomes dos arquivos? Se assim você provavelmente vai querer usar:

System.IO.Path.GetInvalidFileNameChars();

Atualizar : Aqui está uma lista de caracteres inválidos que vem do que GetInvalidPathChars() método

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'
     };

Então, basicamente, os seguintes são caracteres de caminho inválido podem incluir caracteres ASCII / Unicode de 1 a 31, bem como aspas ( "), menor que (<), maior que (>), pipe (|), de retrocesso (\ b ), nulo (\ 0) e tabulação (\ t).

Nenhum dos quais parecem ocorrer em sua seqüência original.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top