2008-10-09 17 views
17

में लॉगिन आईडी से डोमेन जानकारी निकालें मैं सी # में लॉगिन आईडी से डोमेन/कंप्यूटर जानकारी को हटाना चाहता हूं। तो, मैं या तो "डोमेन \ मुझे" या "डोमेन \ मुझे" बस "मुझे" बनाना चाहता हूं। मैं हमेशा के अस्तित्व की जांच कर सकता हूं, और इंडेक्स के रूप में इसे सबस्ट्रिंग शुरू करने के लिए उपयोग कर सकता हूं ... लेकिन मैं कुछ और सुरुचिपूर्ण और कॉम्पैक्ट की तलाश में हूं।सी #

इससे भी बदतर स्थिति:

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

उत्तर

36

जब आपके पास एक हथौड़ा है, सब कुछ एक कील की तरह लग रहा .....

एक रेजर ब्लेड का उपयोग ----

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

    } 

} 
+0

उत्कृष्ट बिंदु; RegEx का उपयोग करना एक और अधिक सुरुचिपूर्ण समाधान है। – Dan

+4

और क्या होगा नाम [email protected] प्रारूप है? कोई भी 5-रेजर ब्लेड समाधान? धन्यवाद। – DoomerDGR8

+1

हाल ही में ऐसा करना था ('NTAccount' से डोमेन हिस्से को हटाकर) और 'Regex.Match (value," ([^\\\\] +) $ ", RegexOptions.None) समूह [0]। कैप्चर [0]। खाता नाम भाग निकालने के लिए वैल्यू ', या' Regex.Replace (value," ^। * \\ \\ ", स्ट्रिंग। लक्षण, आर egexOptions.None); वांछित खाता नाम तक सब कुछ हटाने के लिए। वही अंतर :) – rdev5

3

मैं हमेशा यह इस तरह से कार्य करें:

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

अब आप domainuser.Length देख सकते हैं कि कितने हिस्से हैं देखने के लिए वहाँ और domainuser [0] के लिए उपयोगकर्ता नाम के लिए डोमेन और डोमेन उपयोगकर्ता [1]।

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

हाँ, इस तरह मैं बोल्टबैट के रूपांतरण को कम करने के साथ भी ऐसा करता हूं, क्योंकि उपयोगकर्ता के नाम पर "नियंत्रित" आवरण में उपयोग करना हमेशा उपयोगी होता है (उदाहरण के लिए उन्हें इंडेक्सर कुंजी के रूप में उपयोग करना। –

+0

अच्छा बिंदु, केविन। मैंने यह भी पाया कि इस मामले में गति निश्चित रूप से कोई मुद्दा नहीं था, इसलिए विभाजित करने के लिए कई कॉल इत्यादि के लिए बनाता है, लेकिन ... –

24

आप पथ वर्ग का दुरुपयोग कर सकता है , thusly:

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

अच्छा, यह चालाक है। – Pete

+12

शायद System.IO.Path.GetFileName (ResourceLoginName) का उपयोग करने के लिए सबसे अच्छा है यदि ResourceLoginName में इसके अंदर एक बिंदु है (उदा। Roger.smith), जो सक्रिय निर्देशिका और संभावित रूप से अन्य निर्देशिका सिस्टम के संदर्भ में पूरी तरह स्वीकार्य है। – endian

+1

यह उपयोग करने में इतना गलत लगता है- लेकिन एक ही समय में सही ... – derekmx271

4

कैसे के बारे में बताया गया है:

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

यह दोनों मान्य डोमेन लॉगिन के लिए काम करता है:

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

यह दोनों के लिए, लेकिन नाम के समूहों के साथ काम करेंगे।

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

पिग्गी पर डेरेक स्मॉल्स उत्तर समर्थन ...

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

मेरे लिए काम किया।