Domanda

Vorrei rimuovere le informazioni sul dominio / computer da un ID di accesso in C #. Quindi, vorrei creare sia " Dominio \ me " o " Dominio \ me " solo "io". Potrei sempre verificare l'esistenza di entrambi, e usarlo come indice per iniziare la sottostringa ... ma sto cercando qualcosa di più elegante e compatto.

Scenario peggiore:

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);
È stato utile?

Soluzione

quando tutto ciò che hai è un martello, tutto sembra un chiodo .....

usa una lama di rasoio ----

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

    }

}

Altri suggerimenti

Potresti abusare della classe Path, quindi:

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

Che ne dici di:

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

Funzionerà con entrambi, ma con gruppi nominati.

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

Lo faccio sempre in questo modo:

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

Ora puoi guardare domainuser.Length per vedere quante parti ci sono e domainuser [0] per il dominio e domainuser [1] per il nome utente.

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

Funziona con entrambi i login di dominio validi:

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

Supporto salvadanaio su Derek Smalls Answer ...

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

ha funzionato per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top