C# Kontrola řetězce Contains bez ohledu na velikost písmen
V tomto tutoriálu se naučíme různé způsoby, jak provést kontrolu řetězce obsahuje bez ohledu na velikost písmen v jazyce C#
Vypadá to jako jednoduchý problém, ale výchozí metoda C# string.Contains() rozlišuje malá a velká písmena
A pokud řetězec není v češtině, tj. pro jiné jazyky, nemůžeme porovnávat text bez rozlišení velikosti písmen přímo
Oba řetězce by měly být ve stejné kultuře a My bychom měli znát kulturu jazyka.
Většinou budeme porovnávat řetězce pouze v anglickém jazyce.
Metoda 1: Použití metody C# string.IndexOf().
Pro kontrolu řetězce obsahuje bez rozlišení velikosti písmen můžeme použít metodu C# string.IndexOf().
IndexOf() metoda přijímá parametr StringComparison.OrdinalIgnoreCase, který určuje typ vyhledávání, který se má použít pro znaky.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Metoda 2: Použití metody string.Contains() v sítích .Net 5+ a .NET Core 2.0+
V nejnovějších verzích dot net, tj. v .Net Core 2.0+ a .Net 5+. Metoda string.Contains() má přetíženou metodu, která přijímá parametr StringComparison.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Metoda 3: Použití metody Regex.IsMatch()
Pro kontrolu řetězce contains bez rozlišení velikosti písmen můžeme použít regulární výrazy.
Pokud znáte metodu Regex, použijte metodu Regex.IsMatch() a pro kontrolu nerozlišování velkých a malých písmen předejte parametr RegexOptions.IgnoreCase
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Metoda 4: Použití .ToUpper() & .ToLower()
Pokud jsou řetězce v anglickém jazyce a výkon není problém, můžeme oba řetězce převést na stejná velká a malá písmena a poté provést kontrolu řetězce obsahuje.
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());
//true
C# Kontrola obsahuje bez ohledu na velikost písmen pro ostatní jazyky
Necitlivost na malá a velká písmena je závislá na jazyce
Například v angličtině I je velkých písmen verze i.
Zatímco v tureckém jazyce je velkým písmenem verze i neznámý znak İ.
Abychom mohli provést kontrolu řetězce bez rozlišení velikosti písmen, musíme použít objekt 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
Vytvořil jsem objekt CultureInfo pro turečtinu. A porovnal jsem oba řetězce pomocí CompareInfo, jak je uvedeno níže.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Nejlepší způsob, jak provést kontrolu řetězce Contains bez ohledu na velikost písmen
Pokud používáte nejnovější verzi .Net, použijte metodu string.Contains().
V opačném případě se držte metody string.IndexOf().
Nedávejte přednost metodě .ToUpper() nebo To.Lower(), protože mohou vést k problémům s výkonem.
Pro řetězce jiných jazyků použijte objekt CultureInfo.