如何忽略转义字符Vertical选项卡

时间:2010-10-13 21:48:52

标签: c# escaping

如果用户的名字中有\ v,我使用下面的代码查找用户名时会遇到问题。例如,如果用户名为xxx \ vtest,则在使用LastIndexOf函数时无法找到反斜杠。

string strUser = this.Context.User.Identity.Name;
strUser = strUser.Substring(strUser.LastIndexOf("\\") + 1);

如果我尝试这样做,它没有任何问题。

string strUser = @"xxx\vtest";
strUser = strUser.Substring(strUser.LastIndexOf("\\") + 1);

有关如何在使用User.Identity.Name?

时忽略转义字符的任何想法

1 个答案:

答案 0 :(得分:1)

如果名称有'反斜杠v',你应该找到一个反斜杠,如果名称有一个垂直标签(转义'\ v'),你将找不到反斜杠。您在第二个版本中找到反斜杠的原因是因为您使用带字符串声明more info的@。

试试这个:

string strUser = this.Context.User.Identity.Name;
strUser = strUser.Substring(strUser.LastIndexOf("\v") + 1);

<强> EDITED

如果您知道要查找的转义字符,也可以使用此字符:

string strUser = this.Context.User.Identity.Name;
strUser = strUser.Substring(strUser.LastIndexOfAny(new char[]{'\b','\t','\n','\v','\f','\r','\\'}) + 1);

如果您知道域名后面只有一个字符,您也可以使用Regex来获取用户。

string strUser = this.Context.User.Identity.Name;
strUser = Regex.Replace(strUser, @"^(xxx).(.+)$", "$2");
// or
strUser = Regex.Replace(strUser, @"^([a-zA-Z]*?)[^a-zA-Z](.+)$", "$2");
// or
strUser = Regex.Replace(strUser, @"^(.*?)[\t\n\v\f\r\\/<> ,.@](.+)$", "$2");
// it all depends on your input