为什么这不会做任何事情,输出与输入相同?我很困惑!!!

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

我得到了<!>“; true.jpg <!>”;输出。在生产中使用它之前,我肯定会建议更多的测试! :)

其他提示

使用

获取无效的文件字符
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 \\[[[]]]

哪个是正确的结果。也许你应该问一个关于你想要做什么的新问题,因为你当前的方法似乎表明你对Regex没有很好的理解。

<强>更新: 你想检查文件名吗?如果是这样,你可能想要使用:

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

原始字符串中似乎没有出现任何内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top