C# Caixa insensível Contém verificação de cordel
Neste tutorial aprendemos diferentes formas de fazer uma sequência insensível a casos contém 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 outras línguas, não podemos comparar directamente 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 iremos comparar as cordas apenas em língua inglesa.
Método 1: Usando o método C# string.IndexOf()
.
Podemos utilizar o método C# string.IndexOf()
para fazer uma verificação de cadeia insensível a maiúsculas e minúsculas.
IndexOf()
o método aceita o parâmetro StringComparison.OrdinalIgnoreCase
, que especifica o tipo de pesquisa a utilizar 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 estiver familiarizado com Regex
, utilize o método Regex.IsMatch()
e verifique 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 língua inglesa e o desempenho não for um problema, podemos converter ambas as cordas para o mesmo caso, então a corda contém 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 outras línguas
A insensibilidade ao caso é dependente da linguagem
Por exemplo, na língua inglesa I
é a versão maiúscula de i
.
Considerando que na versão em maiúsculas em língua turca de i
é o carácter desconhecido İ
.
Para fazer a verificação de corda insensível ao caso, precisamos de utilizar o objecto 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
Criei CultureInfo
objecto para a língua turca. E comparei as duas cordas usando CompareInfo
como se mostra abaixo.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
A melhor maneira de fazer Insensível ao caso Contém verificação de cordel
Se estiver a utilizar a última versão de .Net
, utilize o método string.Contains()
.
Caso contrário, seguir o método string.IndexOf()
.
Não preferem o método .ToUpper()
ou To.Lower()
, pois podem conduzir a problemas de desempenho.
Utilizar CultureInfo
objecto para cordas de outras línguas.