C# Preverjanje niza Contains brez upoštevanja velikosti črk

V tem učbeniku se naučimo različnih načinov za preverjanje verige vsebuje v jeziku C#, pri katerih ni občutljiv na velikost črk

Zdi se, da gre za preprost problem, vendar je privzeta metoda C# string.Contains() občutljiva na velike in male črke

In če niz ni v angleškem jeziku, tj. za druge jezike, ne moremo neposredno primerjati besedila brez upoštevanja velikosti črk

Oba niza morata biti v isti kulturi in poznati moramo jezikovno kulturo.

Največkrat bomo primerjali nize samo v angleškem jeziku.

Metoda 1: Uporaba metode C# string.IndexOf().

Uporabimo lahko metodo C# string.IndexOf() za preverjanje vsebnosti nizov brez upoštevanja velikosti črk.

IndexOf() metoda sprejema parameter StringComparison.OrdinalIgnoreCase, ki določa vrsto iskanja, ki naj se uporabi za znake.


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

Metoda 2: Uporaba metode string.Contains() v .Net 5+ in .NET Core 2.0+

V najnovejših različicah dot net, tj. v .Net Core 2.0+ in .Net 5+. Metoda string.Contains() ima preobremenjeno metodo, ki sprejme parameter StringComparison.


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

Metoda 3: Uporaba metode Regex.IsMatch()

Z uporabo regularnih izrazov lahko preverimo, ali niz vsebuje velikost črk ni občutljiv na velikost črk.

Če poznate metodo Regex, uporabite metodo Regex.IsMatch() in za preverjanje neobčutljivosti velikosti prenesite parameter RegexOptions.IgnoreCase

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

//true

Metoda 4: Uporaba .ToUpper() & .ToLower()

Če sta niza v angleškem jeziku in zmogljivost ni problematična, lahko oba niza pretvorimo v enake velikosti in nato preverimo, ali niz vsebuje.


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

//true

C# Preverjanje vsebnosti brez upoštevanja velikosti črk za druge jezike

Neobčutljivost na velikost je odvisna od jezika

Na primer, v angleškem jeziku je I različica i z velikimi črkami.

Medtem ko je v turškem jeziku velika črka različice i neznani znak İ.

Za preverjanje niza brez upoštevanja velikosti črk moramo uporabiti predmet 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

Za turški jezik sem ustvaril objekt CultureInfo. Oba niza sem primerjal z uporabo CompareInfo, kot je prikazano spodaj.

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

Najboljši način za preverjanje niza Contains brez upoštevanja velikosti črk

Če uporabljate najnovejšo različico .Net, uporabite metodo string.Contains().

V nasprotnem primeru se držite metode string.IndexOf().

Ne uporabljajte raje metod .ToUpper() ali To.Lower(), saj lahko povzročita težave pri delovanju.

Za nize v drugih jezikih uporabite predmet CultureInfo.