从 C# 中的登录 ID 中删除域信息

问题描述 投票:0回答:9

我想从 C# 中的登录 ID 中删除域/计算机信息。所以,我想让“Domain\me”或“Domain\me”只是“我”。我总是可以检查其中任何一个是否存在,并使用它作为索引来启动子字符串......但我正在寻找更优雅和紧凑的东西。

最坏的情况:

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);
c# string indexof
9个回答
43
投票

当你只有一把锤子时,一切看起来都像钉子......

使用剃须刀刀片----

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

    }

}

27
投票

您可能会滥用 Path 类,因此:

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

6
投票

怎么样:

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

6
投票

这对两者都适用,但对于命名组。

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

3
投票

我总是这样做:

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

现在你可以查看domainuser.Length来看看有多少部分,domainuser[0]表示域,domainuser[1]表示用户名。


3
投票

这适用于两个有效的域登录:

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

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

2
投票

小猪支持德里克·斯莫斯的回答……

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

为我工作。


0
投票

作为@Drew答案的改进

User.Identity.Name.Split('\\').Last()

这样您还可以匹配带域和不带域的用户名

© www.soinside.com 2019 - 2024. All rights reserved.