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