C# Caixa insensível Contém verificação de cordel

Neste tutorial, aprendemos diferentes maneiras de fazer uma seqüência insensível a maiúsculas e minúsculas, contendo verificação em C#

Parece ser um problema simples, mas o método padrão C# string.Contains() é sensível a maiúsculas e minúsculas

E se a corda não estiver em inglês, ou seja, para outros idiomas, não podemos comparar diretamente os casos de texto insensíveis

As duas cordas devem estar na mesma cultura e nós devemos conhecer a cultura linguística.

Na maioria das vezes vamos comparar as cordas apenas em inglês.

Método 1: Usando o método C# string.IndexOf().

Podemos usar o método C# string.IndexOf() para fazer a verificação de corda insensível a maiúsculas e minúsculas.

IndexOf() o método aceita o parâmetro StringComparison.OrdinalIgnoreCase, que especifica o tipo de busca a ser usado para os caracteres.


string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;

Método 2: Usando o método string.Contains() em .Net 5+ & .NET Core 2.0+

Nas últimas versões do dot net, ou seja, em .Net Core 2.0+ e .Net 5+. O método string.Contains() tem um método sobrecarregado que aceita o parâmetro StringComparison.


string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);

Método 3: Usando o método Regex.IsMatch()

Podemos usar expressões regulares para fazer a verificação de casos insensíveis contém cordel.

Se você está familiarizado com Regex, utilize o método Regex.IsMatch() e para verificar se o parâmetro RegexOptions.IgnoreCase é insensível a maiúsculas e minúsculas

var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);

//true

Método 4: Usando .ToUpper() & .ToLower()

Se as cordas estiverem em inglês e o desempenho não for um problema, podemos converter ambas as cordas para o mesmo caso, então, faça com que a corda contenha verificação.


var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or 
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());

//true

C# Insensível à caixa Contém verificação para outros idiomas

A insensibilidade ao caso é dependente da linguagem

Por exemplo, no idioma inglês I é a versão em maiúsculas do i.

Considerando que na versão em maiúsculas em turco do i é o caráter desconhecido İ.

Para fazer a verificação de corda insensível ao caso, precisamos usar o objeto CultureInfo.


var text = "İ";

var check = "i";
            
CultureInfo trCulture = new CultureInfo("tr-TR",false);

bool englishContains = text.IndexOf(check, StringComparison.OrdinalIgnoreCase) >= 0;
//false

var turkishContains = trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
//true

Eu criei CultureInfo objeto para a língua turca. E comparei as duas cordas usando CompareInfo, como mostrado abaixo.

trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;

A melhor maneira de fazer Insensibilidade ao caso Contém verificação de cordas

Se você estiver usando a última versão do .Net, use o método string.Contains().

Caso contrário, siga o método string.IndexOf().

Não prefira o método .ToUpper() ou To.Lower(), pois eles podem levar a problemas de desempenho.

Use CultureInfo objeto para cordas em outros idiomas.