Pergunta

Eu gostaria de remover as informações de domínio/computador de um ID de login em C#. Então, eu gostaria de fazer "domínio me" ou "domain me" apenas "eu". Eu sempre poderia verificar a existência de qualquer um e usá -lo como índice para iniciar a substring ... mas estou procurando algo mais elegante e compacto.

Pior cenário de caso:

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);
Foi útil?

Solução

Quando tudo que você tem é um martelo, tudo parece uma unha .....

Use uma lâmina de barbear ----

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

    }

}

Outras dicas

Você poderia abusar da classe de caminho, assim:

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

Como é:

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

Isso funcionará para ambos, mas com grupos nomeados.

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

Eu sempre faço desta maneira:

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

Agora você pode olhar para o domainuser.length para ver quantas peças existem e o domainuser [0] para o domínio e o domainuser [1] para o nome de usuário.

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

Isso funciona para os dois logins de domínio válidos:

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

Piggy apoiando em Derek Smalls Responder ...

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

trabalhou para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top