public void Test(String userWithDomain)
{
// assume userWithDomain could be a console input or an ajax call.
// 1: userWithDomain = "domain\\user";
// 2: userWithDomain = "domain\user";
// 3: userWithDomain = "domain\test";
// (1) would work;
// (2) would work too [this kind of input is not valid from within a C# app]
// (3) wouldn't work because \t would a valid escape sequence and output would be "domin" "est"
String[] split = userWithDomain.Split(new String[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
foreach (String item in split)
{
Console.WriteLine(item);
}
// How do I fix (3)?
}
修改
代码适用于所有情况,但如果从JavaScript(“domain \ testuser”)等javascript调用此方法则会失败;
答案 0 :(得分:5)
我的猜测是,你的测试数据被搞砸了,而不是代码。
例如,如果你正在做:
string userWithDomain = "domain\test";
那么不是你从AJAX,控制台输入等实际得到的东西 - 因为你实际上有“域”,然后是一个标签,然后是“est”。
要在C#源代码中表示文本“domain \ test”,最简单的方法是使用逐字字符串文字:
string userWithDomain = @"domain\test";
在您的测试用例中使用 ,我怀疑您会发现它工作正常。 (我个人使用userWithDomain.Split('\\', StringSplitOptions.RemoveEmptyEntries)
,但这确实是一个不同的问题。)
答案 1 :(得分:0)
你要做的是你实际上无法做到的事情。因为你无法“检测”javascript作者想要反斜杠后跟一个t或一个真正的标签。您需要依赖您的javascript作者在需要时使用正确的转义格式。
如果您对此非常有信心(假设转义字符不是用户名中的有效字符),您可以再次将其转义,例如查找所有标签并再次使用@"\t"
替换它们。