如何比较不区分大小写和不区分重音的字符串

本文关键字:不区 字符串 大小写 何比较 比较 | 更新日期: 2023-09-27 18:37:09

如何比较不区分大小写和不区分重音的字符串

好的,这在SQL服务器上很容易完成

但是,我想在 C# .NET 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

我需要一种方法来说明下面的这两个是相同的SQL服务器说它们是相等的。

 tarafli 
 TARAFLİ 

如何比较不区分大小写和不区分重音的字符串

要忽略大小写和重音,您可以将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));

您可以将string.Compare与重载一起使用,该重载需要适当的CultureInfoCompareOptions

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

编辑:

至于你关于CultureInfo的问题,来自MSDN:

比较使用区域性参数来获取特定于区域性 信息,例如大小写规则和 单个字符。例如,特定区域性可以指定 将某些字符组合视为单个字符 字符,即在 特定方式,或者字符的排序顺序取决于 在其之前或之后的字符。