2010-10-13 21 views
0

如果用戶在其名稱中包含\ 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

你能否給我們提供'this.Context.User.Identity.Name'的實際值? – Nayan 2010-10-13 21:56:52

+0

我結束了使用System.Environment.UserName而不是Identity.Name。這樣我不需要獲取子字符串。 – Jeff 2010-10-14 01:51:07

回答

1

如果名稱有'反斜槓',你應該找到一個反斜槓,如果名稱有一個垂直標籤(轉義'\ 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\\/<> ,[email protected]](.+)$", "$2"); 
// it all depends on your input 
+0

如果名稱中可能包含其他字符「\ v」或其他轉義字符,該怎麼辦? – Jeff 2010-10-13 23:08:48

+0

我編輯了我的答案..我認爲正則表達式是最好的方式,因爲您可以對部分輸入進行限制,但這只是我個人的觀點 – 2010-10-14 07:48:35