C# Kontrola reťazca Contains bez ohľadu na veľkosť písmen

V tomto tutoriáli sa naučíme rôzne spôsoby, ako v jazyku C# vykonať kontrolu reťazca obsahuje bez ohľadu na veľkosť písmen

Vyzerá to ako jednoduchý problém, ale predvolená metóda C# string.Contains() rozlišuje veľkosť písmen

A ak reťazec nie je v slovenčine, t. j. v prípade iných jazykov, nemôžeme priamo porovnávať text bez ohľadu na veľkosť písmen

Oba reťazce by mali byť v rovnakej kultúre a My by sme mali poznať kultúru jazyka.

Väčšinou budeme porovnávať reťazce len v anglickom jazyku.

Metóda 1: Použitie metódy C# string.IndexOf().

Na vykonanie kontroly reťazca obsahuje bez ohľadu na veľkosť písmen môžeme použiť metódu C# string.IndexOf().

IndexOf() metóda prijíma parameter StringComparison.OrdinalIgnoreCase, ktorý určuje typ vyhľadávania, ktorý sa má použiť pre znaky.


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

Metóda 2: Použitie metódy string.Contains() v prostredí .Net 5+ a .NET Core 2.0+

V najnovších verziách dot net, t. j. v .Net Core 2.0+ a .Net 5+. Metóda string.Contains() má preťaženú metódu, ktorá prijíma parameter StringComparison.


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

Metóda 3: Použitie metódy Regex.IsMatch()

Na kontrolu reťazca contains bez rozlišovania veľkosti písmen môžeme použiť regulárne výrazy.

Ak poznáte metódu Regex, použite metódu Regex.IsMatch() a na kontrolu nerozlišovania veľkých a malých písmen odovzdajte parameter RegexOptions.IgnoreCase

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

//true

Metóda 4: Použitie .ToUpper() & .ToLower()

Ak sú reťazce v anglickom jazyku a výkon nie je problém, môžeme oba reťazce previesť na rovnaké veľké a malé písmená a potom vykonať kontrolu reťazca 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 Contains bez zohľadnenia veľkosti písmen pre iné jazyky

Necitlivosť na veľkosť písmen závisí od jazyka

Napríklad v angličtine I je verzia i s veľkými písmenami.

Zatiaľ čo v tureckom jazyku je veľkým písmenom verzia i neznámy znak İ.

Ak chceme vykonať kontrolu reťazca bez rozlišovania veľkých a malých písmen, musíme použiť 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

Vytvoril som objekt CultureInfo pre turecký jazyk. A porovnal som oba reťazce pomocou CompareInfo, ako je uvedené nižšie.

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

Najlepší spôsob, ako vykonať kontrolu reťazca Contains bez ohľadu na veľkosť písmen

Ak používate najnovšiu verziu .Net, použite metódu string.Contains().

V opačnom prípade zostaňte pri metóde string.IndexOf().

Nepreferujte metódu .ToUpper() alebo To.Lower(), pretože môžu viesť k problémom s výkonom.

Pre reťazce iných jazykov použite objekt CultureInfo.