Удалить информацию о домене из идентификатора входа в C # - PullRequest
18 голосов
/ 09 октября 2008

Я хотел бы удалить информацию о домене / компьютере из идентификатора входа в C #. Итак, я хотел бы сделать либо «Домен \ я», либо «Домен \ я» просто «я». Я всегда мог проверить наличие любого из них и использовать его в качестве индекса для запуска подстроки ... но я ищу что-то более элегантное и компактное.

В худшем случае:

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

Ответы [ 8 ]

39 голосов
/ 09 октября 2008

когда у вас есть только молоток, все выглядит как гвоздь .....

используйте лезвие бритвы ----

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

    }

}
25 голосов
/ 09 октября 2008

Вы можете злоупотреблять классом Path, таким образом:

string shortName = System.IO.Path.GetFileNameWithoutExtension(ResourceLoginName);
6 голосов
/ 02 мая 2011

Как насчет:

string shortName = ResourceLoginName.Split('\\')[1]
5 голосов
/ 12 января 2015

Это будет работать для обоих, но с именованными группами.

^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$
3 голосов
/ 09 октября 2008

Я всегда так делаю:

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

Теперь вы можете посмотреть на domainuser.Length, чтобы увидеть, сколько там частей, и domainuser [0] для домена и domainuser [1] для имени пользователя.

2 голосов
/ 06 августа 2014

Это работает для обоих допустимых доменных имен:

var regex = @"^(.*\\)?([^\@]*)(@.*)?$";
var user = Regex.Replace("domain\\user", regex, "$2", RegexOptions.None);
user = Regex.Replace("user@domain.com", regex, "$2", RegexOptions.None);
2 голосов
/ 09 октября 2008
        string theString = "domain\\me";
        theString = theString.Split(new char[] { '\\' })[theString.Split(new char[] { '\\' }).Length - 1];
1 голос
/ 12 августа 2015

Копилка на Дерека Смолласа Ответ ...

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

работал на меня.

...