7

केस संवेदी और उच्चारण असंवेदनशील साथ तार की तुलना करने के लिए कैसे के साथ तार की तुलना कैसेकेस संवेदी और उच्चारण असंवेदनशील

ठीक है इस एसक्यूएल सर्वर

पर आसानी से किया जाता है हालांकि मैं सी # में भी ऐसा ही करना चाहते हैं। नेट 4.5.1।

मैं इसे सबसे उचित तरीके से कैसे कर सकता हूं?

मेरा मतलब है इन 3 तार बराबर लौट जाना चाहिए जब

http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html 
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html 
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html 

तुलना में मैं एक विधि के नीचे इन 2 एक ही एसक्यूएल सर्वर का कहना है कि वे बराबर हैं कर रहे हैं का कहना है कि जरूरत है।

tarafli 
TARAFLİ 
+1

जवाब क्यों के लिए इस उत्तर पर एक नजर डालें http://stackoverflow.com/questions/359827/ignoring-accented-letters-in-string-comparison – p1va

उत्तर

11

दोनों मामले और लहजे की अनदेखी करने के लिए, तुम इतनी तरह, दोनों IgnoreNonSpace और IgnoreCase विकल्पों के साथ string.Compare() उपयोग कर सकते हैं:

string s1 = "http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html"; 
string s2 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html"; 
string s3 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html"; 

Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 
Console.WriteLine(string.Compare(s2, s3, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 

नीचे अपनी टिप्पणी के जवाब में, इस tarafli और TARAFLİ भी लिए काम करता है ।

निम्नलिखित कोड प्रिंट 0, तार अर्थ बराबर हैं:

string s1 = "tarafli"; 
string s2 = "TARAFLİ"; 
Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 

और यहाँ यह तुर्की संस्कृति (मैं क्या सही संस्कृति है पर अनुमान लगा रहा हूँ) का उपयोग कर रहा है। यह भी प्रिंट 0:

string s1 = "tarafli"; 
string s2 = "TARAFLİ"; 

var trlocale = CultureInfo.GetCultureInfo("tr-TR"); 
Console.WriteLine(string.Compare(s1, s2, trlocale, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 
+0

धन्यवाद के बराबर कहता है उत्तर के लिए हमें वर्तमान संस्कृति की आवश्यकता क्यों है? – MonsterMMORPG

+0

ठीक है यह विधि इन 2 तारों के लिए विफल रही है: tarafli - TARAFLİ हालांकि एसक्यूएल सर्वर – MonsterMMORPG

+0

@MonsterMMORPG होने के बराबर बराबर कहता है जो उन तारों से हैं? –

3

आप उपयोग कर सकते हैं अधिभार जो उचित CultureInfo और CompareOptions लेता है साथ string.Compare:

string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | 
                CompareOptions.IgnoreCase); 

संपादित करें:

CultureInfo पर अपने प्रश्न के लिए के रूप में, MSDN से:

तुलना संस्कृति-विशिष्ट जानकारी प्राप्त करने के लिए संस्कृति पैरामीटर का उपयोग करती है, जैसे कि नियम नियम और व्यक्तिगत वर्णों के वर्णमाला क्रम। उदाहरण के लिए, एक विशेष संस्कृति निर्दिष्ट कर सकती है कि वर्णों के कुछ संयोजनों को एक वर्ण के रूप में माना जा सकता है, कि अपरकेस और लोअरकेस अक्षरों की तुलना विशेष रूप से की जाती है, या किसी वर्ण का क्रम क्रम वर्णों पर निर्भर करता है जो पहले या इसका पालन करें।

+0

धन्यवाद क्या हमें वर्तमान संस्कृति की आवश्यकता है? – MonsterMMORPG

+1

क्योंकि आप उस संस्कृति के साथ संगत होना चाहते हैं जो उपयोगकर्ता अपनी मशीन पर चलता है। मेरा संपादन देखें। –

+0

उत्तर के लिए धन्यवाद फिर से हम कह सकते हैं कि एमएस एसक्यूएल सर्वर उस जानकारी का भी उपयोग करता है जब मैं परिवर्तनीय संस्कृति और परिवर्तनीय मामला सेट करता हूं? – MonsterMMORPG

संबंधित मुद्दे