7

如何使用不區分大小寫和重音不敏感的比較字符串比較如何串用不區分大小寫,不區分重音

好吧,這是在SQL服務器

容易做到但我想這樣做在C#。 NET 4.5.1。

我怎樣才能以最合適的方式做到這一點?

我的意思是比較

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相同的SQL服務器說,他們是平等的方法,這些字符串3應該返回相等。

tarafli 
TARAFLİ 
+1

看看這個答案 http://stackoverflow.com/questions/359827/ignoring-accented-letters-in-string-comparison – p1va

回答

11

要忽略大小寫和重音,您可以使用string.Compare()同時與IgnoreNonSpaceIgnoreCase選項,就像這樣:

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

在回答下面您的意見,這個工程的tarafliTARAFLİ太。

下面的代碼打印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

感謝SQL服務器說等於爲什麼我們需要當前的文化? – MonsterMMORPG

+0

確定這種方法失敗,這兩個字符串:tarafli - TARAFLİ但是SQL服務器等於說是應該是 – MonsterMMORPG

+0

@MonsterMMORPG哪些區域是那些字符串的? –

3

您可以使用string.Compare與採取適當CultureInfoCompareOptions過載:

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

編輯:

至於在CultureInfo你的問題,從MSDN

該比較使用文化參數獲取文化特定的信息,例如外殼規則和個別字符的字母順序 。例如,一個特定的培養可以指定 的字符的某些組合被視爲單個 字符,即大寫和小寫字符在一個 特定的方式進行比較,或一個字符的排序順序取決於 字符之前或遵循它。

+0

感謝回答爲什麼我們需要當前的文化嗎? – MonsterMMORPG

+1

因爲你想與用戶在他的機器上運行的文化兼容。看我的編輯。 –

+0

再次感謝您的回答我們可以說,當我設置不變的文化和不變的情況下,MS SQL服務器也使用這些信息嗎? – MonsterMMORPG