为什么这不会做任何事情,输出与输入相同?我很困惑!!!
string name = ";;;'']][[ zion \\\[[[]]]"
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
答案 0 :(得分: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”输出。在生产中使用它之前,我肯定会建议更多的测试! :)
答案 1 :(得分: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,以及quote(“),小于(&lt;),大于(&gt;),pipe(|),backspace( \ b),null(\ 0)和tab(\ t)。
原始字符串中似乎没有出现任何内容。
答案 2 :(得分:4)
使用
获取无效的文件字符char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();