7

Wie Strings mit Groß- und Kleinschreibung und unempfindlich Akzent vergleichenWie Zeichenfolge vergleichen mit Groß- und Kleinschreibung und Akzente unempfindlich

Okay diese

leicht auf SQL Server ausgeführt wird, aber ich das gleiche bei C# tun möchte. NET 4.5.1.

Wie kann ich das am besten tun?

meine ich diese 3 Strings sollte gleich zurück, wenn

Vergleich
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 

Ich brauche eine Methode, die diese 2 unten sind die gleichen SQL Server sagt, sie sind gleich sagen würde.

tarafli 
TARAFLİ 
+1

bei dieser Antwort Werfen Sie einen Blick http://stackoverflow.com/questions/359827/ignoring-accented-letters-in-string-comparison – p1va

Antwort

11

beide ignorieren Fall und Akzente, Sie string.Compare() mit den beiden IgnoreNonSpace und die IgnoreCase Optionen, wie so verwenden können:

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

unten Als Antwort auf Ihre Kommentare, funktioniert dies für tarafli und TARAFLİ zu .

Der folgende Code druckt 0, die Saiten Bedeutung sind gleich:

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

Und hier ist es, die türkische Kultur mit (ich nehme an, was die richtige Kultur ist). Dieser druckt auch 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

danke Warum brauchen wir aktuelle Kultur? – MonsterMMORPG

+0

ok diese Methode ist für diese 2 Zeichenfolgen fehlgeschlagen: tarafli - TARAFLI aber SQL Server sagt gleich wie angenommen werden soll – MonsterMMORPG

+0

@MonsterMMORPG Aus welchem ​​Ort stammen diese Zeichenfolgen? –

3

Sie string.Compare mit der Überlastung verwenden können, die die ordnungsgemäße CultureInfo und CompareOptions nimmt:

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

Edit:

Was Ihre Frage auf CultureInfo, von MSDN:

Der Vergleich verwendet den culture-Parameter, um kulturspezifische Informationen zu erhalten, wie z. B. die Casing-Regeln und die alphabetische Reihenfolge der einzelnen Zeichen . Beispielsweise könnte eine bestimmte Kultur angeben, dass bestimmte Kombinationen von Zeichen als ein einzelnes Zeichen behandelt werden, dass Groß- und Kleinbuchstaben in einer bestimmten Weise verglichen werden oder dass die Sortierreihenfolge eines Zeichens von den vorangestellten Zeichen abhängt oder folge ihm.

+0

Dank für Antwort, warum Brauchen wir aktuelle Kultur? – MonsterMMORPG

+1

Da Sie mit der Kultur kompatibel sein möchten, die der Benutzer auf seinem Computer ausführt. Siehe meine Bearbeitung. –

+0

danke für die Antwort wieder können wir sagen, dass MS SQL-Server verwendet auch diese Informationen, wenn ich invariante Kultur und invariante Fall? – MonsterMMORPG