2008-10-09 6 views
17

Ich möchte die Domain/Computer-Informationen aus einer Login-ID in C# entfernen. Also, ich möchte entweder "Domain \ me" oder "Domain \ me" nur "mich" machen. Ich könnte immer nach der Existenz von beiden suchen und diese als Index verwenden, um den Teilstring zu starten ... aber ich suche nach etwas eleganterem und kompaktem.Entfernen Sie Domain-Informationen aus der Login-ID in C#

Schlimmer-Case-Szenario:

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); 

Antwort

36

, wenn alles, was Sie haben ein Hammer ist, alles wie ein Nagel aussieht .....

eine Rasierklinge verwenden ----

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

Ausgezeichneter Punkt, mit RegEx ist eine viel elegantere Lösung.Oder – Dan

+4

Und was ist, wenn name ist [email protected] format? Irgendwelche 5-razer-blade-lösung dort? Danke. – DoomerDGR8

+1

Hatte auch das vor kurzem tun (entfernen domäne teil von 'NTAccount') und kam mit' Regex.Match (wert, "([^\\\\] +) $ ", RegexOptions.None) .Groups [0] .Captures [0] .Value" zum direkten Extrahieren des Kontonamens, oder 'Regex.Replace (value, ^. * \\ \\ ", string.Empty, R egexOptions.None); 'um alles bis zum gewünschten Accountnamen zu entfernen. Derselbe Unterschied :) – rdev5

3

ich es immer tun, auf diese Weise:

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

jetzt sind Sie in domainuser.Length schauen, um zu sehen, wie viele Teile gibt es und domain [0] für die Domäne und den Domänenbenutzer [1] für den Benutzernamen.

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

Ja, das ist, wie ich es auch mit dem Zusatz von BoltBaits Konvertierung zu niedrigeren, weil es immer hilfreich ist, die Benutzernamen in einem "kontrollierten" Gehäuse (wenn sie als Indexer Tasten zum Beispiel verwenden. –

+0

Guter Punkt, Kevin. Ich dachte auch, dass Geschwindigkeit in diesem Fall definitiv kein Problem war, daher die mehrere Aufrufe zu spalten, etc. Macht für hässlichen Code, aber ... –

24

Sie die Path-Klasse missbrauchen könnte , so:

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

Schön, das ist schlau. – Pete

+12

Wahrscheinlich am besten, System.IO.Path.GetFileName (ResourceLoginName) zu verwenden, falls ResourceLoginName einen Punkt enthält (z. B. roger.smith), was in Bezug auf Active Directory und vermutlich andere Verzeichnissysteme absolut zulässig ist. – endian

+1

Es fühlt sich so falsch an, dies zu benutzen - aber so zur gleichen Zeit lol ... – derekmx271

4

Wie geht um:

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

Dies funktioniert für beide gültige Domain-Anmeldungen:

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

Dies wird für beide arbeiten, aber mit benannten Gruppen.

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

Piggy auf Derek Smalls Antwort Sicherung ...

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

für mich gearbeitet.

Verwandte Themen