3

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

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

string valid = Regex.Replace(name, "[" + invalidString + "]", "");
4

3 回答 3

6

编辑:

我认为这可能只是测试数据不完善的情况(以及其他人建议的功能更改)。尝试这个:

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”输出。我肯定会建议在生产中使用它之前进行更多测试!:)

于 2009-09-10T02:33:58.530 回答
4

什么都做不了是什么意思?我在控制台应用程序中运行了以下内容:

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,以及引号 (")、小于 (<)、大于 (>)、管道 (|)、退格 (\b)、null (\0) 和制表符 (\t)。

这些似乎都没有出现在您的原始字符串中。

于 2009-09-10T02:29:39.097 回答
4

使用获取无效文件字符,

char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();
于 2009-09-10T02:31:50.733 回答