Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的登录id中删除域信息#_C#_String_Indexof - Fatal编程技术网

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

C# 从C中的登录id中删除域信息#,c#,string,indexof,C#,String,Indexof,我想从C#中的登录id中删除域/计算机信息。所以,我想让“域\我”或“域\我”只是“我”。我总是可以检查其中任何一个的存在,并使用它作为开始子字符串的索引…但我正在寻找更优雅和紧凑的东西 更糟糕的情况是: int startIndex = 0; int indexOfSlashesSingle = ResourceLoginName.IndexOf("\"); int indexOfSlashesDouble = ResourceLoginName.IndexOf("\\"); if (inde

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

更糟糕的情况是:

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

我总是这样做:

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

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

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

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


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

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

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

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

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

这将适用于这两个组,但适用于命名组

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

依靠德里克·斯莫尔的回答

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

为我工作。

是的,我也是这样做的,添加了BoltBait到lower的转换,因为将用户名放在“受控”的大小写中总是很有帮助的(例如,如果将它们用作索引键。这一点很好,Kevin。我还认为,在这种情况下,速度绝对不是问题,因此多次调用split等会产生难看的代码,但……这一点非常好;使用正则表达式是一个更优雅的解决方案。如果名称是username@domain.com格式化?有任何5-razer刀片解决方案吗anks.最近也不得不这样做(从
NTAccount
中删除域部分),并提出了
Regex.Match(value,“([^\\\\]+)$”,RegexOptions.None).组[0]。捕获[0]。直接提取帐户名部分的value
,或
Regex.Replace(value,“^.\\\\\\”,string.Empty,RegexOptions.None);
用于将所有内容删除到所需的帐户名。相同的区别:)@“^(?:[^\]+\)?([^\]+)$”允许匹配带域和不带域的用户名。如果ResourceLoginName中有点(例如,roger.smith),可能最好使用System.IO.Path.GetFileName(ResourceLoginName)(ResourceLoginName),这在Active Directory和其他目录系统中是完全允许的。
Regex.Replace(User.Identity.Name,@"^(?<domain>.*)\\(?<username>.*)|(?<username>[^\@]*)@(?<domain>.*)?$", "${username}", RegexOptions.None)