Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何比较不区分大小写和不区分重音的字符串_C#_.net_String Comparison_Case Insensitive_Accent Insensitive - Fatal编程技术网

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

C# 如何比较不区分大小写和不区分重音的字符串,c#,.net,string-comparison,case-insensitive,accent-insensitive,C#,.net,String Comparison,Case Insensitive,Accent Insensitive,如何比较不区分大小写和不区分重音的字符串 好的,这在SQL server上很容易完成 然而,我想在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-12c

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

好的,这在SQL server上很容易完成

然而,我想在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
我需要一个方法,可以说这2个下面是相同的SQL server说他们是平等的

 tarafli 
 TARAFLİ 

您可以使用
字符串。将
与重载进行比较,重载采用适当的
文化信息
比较选项

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

关于您关于
文化信息
的问题,请联系:

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


要同时忽略大小写和重音,可以使用
string.Compare()
IgnoreNonSpace
IgnoreCase
选项,如下所示:

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

看看这个答案,因为您希望与用户在其机器上运行的文化兼容。请参阅我的编辑。再次感谢您的回答。当我设置不变区域性和不变大小写时,我们可以说MS SQL server也使用该信息吗?MSSQL与任何东西有什么关系?无论哪台机器工作不变区域性和不变大小写,所以我想:D啊我设置了拉丁语,虽然:D我现在明白了。确定此方法对这两个字符串失败:tarafli-TARAFLİ然而SQL server说应该相等此方法对这两个字符串失败:tarafli-TARAFLİ然而SQL server说应该相等be@MonsterMMORPG这些字符串来自哪个地区?@MonsterMMORPG当我尝试使用这些字符串时,效果很好。我会把它放在我的答案中。我也尝试过,它对我很有效(我使用了不变文化)。