2008-10-09 52 views
17

我想從C#中的登錄ID中刪除域/計算機信息。所以,我想讓「Domain \ me」或「Domain \ me」只是「我」。我總是可以檢查是否存在,並將其用作啓動子字符串的索引...但我正在尋找更優雅和緊湊的東西。從C#中的登錄ID中刪除域信息

更糟糕的情況是:

int startIndex = 0; 
int indexOfSlashesSingle = ResourceLoginName.IndexOf("\"); 
int indexOfSlashesDouble = ResourceLoginName.IndexOf("\\"); 
if (indexOfSlashesSingle != -1) 
    startIndex = indexOfSlashesSingle; 
else 
    startIndex = indexOfSlashesDouble; 
string shortName = ResourceLoginName.Substring(startIndex, ResourceLoginName.Length-1); 

回答

36

時,你只有一把錘子,一切看起來都像釘子.....

使用刀片----

using System; 
using System.Text.RegularExpressions; 
public class MyClass 
{ 
    public static void Main() 
    { 
     string domainUser = Regex.Replace("domain\\user",".*\\\\(.*)", "$1",RegexOptions.None); 
     Console.WriteLine(domainUser); 

    } 

} 
+0

優點:使用RegEx是一個更優雅的解決方案 – Dan 2008-10-09 16:38:27

3

我總是這樣說:

string[] domainuser; 
    string Auth_User = Request.ServerVariables["AUTH_USER"].ToString().ToLower(); 
    domainuser = Auth_User.Split('\\'); 

現在你可以看看domainuser.Length,看看有多少部分是有和domainuser [0]用戶名和域用戶名[1]。

2
 string theString = "domain\\me"; 
     theString = theString.Split(new char[] { '\\' })[theString.Split(new char[] { '\\' }).Length - 1]; 
+0

是的,我這樣做也是因爲BoltBait的轉換次數減少了,因爲把用戶名放在一個「受控」的套管裏(如果用它們作爲索引鍵的話,總是很有幫助的) – 2008-10-09 01:46:16

+0

好點,凱文。我也認爲速度在這種情況下絕對不是問題,因此多次調用拆分等等使得代碼難看,但是... – 2008-10-09 02:20:32

24

你可能濫用Path類,正是如此:

string shortName = System.IO.Path.GetFileNameWithoutExtension(ResourceLoginName); 
4

如何是關於:

string shortName = ResourceLoginName.Split('\\')[1] 
1

這既適用於有效的域登錄:

var regex = @"^(.*\\)?([^\@]*)(@.*)?$"; 
var user = Regex.Replace("domain\\user", regex, "$2", RegexOptions.None); 
user = Regex.Replace("[email protected]", regex, "$2", RegexOptions.None); 
2

這兩種但命名組工作。

^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$ 
0

小豬德里克小商品答案背...

Regex.Replace(User.Identity.Name,@"^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$", "${username}", RegexOptions.None) 

爲我工作。