如果用户的名字中有\ 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?
时忽略转义字符的任何想法答案 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