إزالة معلومات المجال من معرف تسجيل الدخول في C#

StackOverflow https://stackoverflow.com/questions/185559

  •  06-07-2019
  •  | 
  •  

سؤال

أرغب في إزالة معلومات المجال/الكمبيوتر من معرف تسجيل الدخول في C#. لذا ، أود أن أجعل إما "المجال 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);
هل كانت مفيدة؟

المحلول

عندما يكون كل ما لديك هو مطرقة ، كل شيء يشبه الظفر .....

استخدم شفرة الحلاقة ----

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

    }

}

نصائح أخرى

يمكنك إساءة استخدام فئة المسار ، وبالتالي:

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

كيف حال:

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

هذا سوف يعمل لكليهما ولكن مع مجموعات تسمي.

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

أنا دائما أفعل ذلك بهذه الطريقة:

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

يمكنك الآن إلقاء نظرة على Domainuser.Length لمعرفة عدد الأجزاء الموجودة و Domainuser [0] للمجال والمجال [1] لاسم المستخدم.

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

هذا يعمل لكلا تسجيلات تسجيلات المجال الصالحة:

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

الدعم الخنزير على ديريك سمولز إجابة ...

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

عملت بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top