C# Case insensitive Contains string ellenőrzés

Ebben a bemutatóban megtanuljuk a különböző módokat, hogy nagy- és kisbetű-érzékeny string contains ellenőrzés C#-ban

Egyszerű problémának tűnik, de az alapértelmezett C# string.Contains() módszer nagy- és kisbetű érzékeny

És ha a karakterlánc nem angol nyelvű, azaz más nyelvek esetében nem tudjuk közvetlenül összehasonlítani a szöveget case insensitive

Mindkét karakterláncnak ugyanabban a kultúrában kell lennie, és ismernünk kell a nyelvi kultúrát.

Legtöbbször csak angol nyelvű karakterláncokat fogunk összehasonlítani.

1. módszer: C# string.IndexOf() módszerrel.

Használhatjuk a C# string.IndexOf() módszert a nagy- és kisbetűket nem érzékelő string contains ellenőrzésére.

IndexOf() a módszer elfogadja a StringComparison.OrdinalIgnoreCase paramétert, amely megadja a karakterek keresésének típusát.


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

2. módszer: A string.Contains() módszer használata .Net 5+ és .NET Core 2.0+ rendszerekben

A dot net legújabb verzióiban, azaz a .Net Core 2.0+ és .Net 5+ rendszerekben. A string.Contains() metódusnak van egy túlterhelt metódusa, amely elfogadja a StringComparison paramétert.


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

3. módszer: A Regex.IsMatch() módszer használata

A szabályos kifejezésekkel elvégezhetjük a nagy- és kisbetűket nem figyelembe vevő contains string ellenőrzést.

Ha ismeri a Regex, használja a Regex.IsMatch() módszert, és a case insensitive ellenőrzéséhez adja át a RegexOptions.IgnoreCase paramétert

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

//true

4. módszer: A .ToUpper() & .ToLower()

Ha a karakterláncok angol nyelvűek, és a teljesítmény nem jelent problémát, akkor mindkét karakterláncot azonos esetre konvertálhatjuk, majd elvégezhetjük a string contains ellenőrzést.


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

//true

C# Case insensitive Contains check más nyelvek esetén

Az esetek érzéketlensége nyelvfüggő

Például az angol nyelvben a I a i nagybetűs változata.

Míg a török nyelvben a i nagybetűs változata a İ ismeretlen karaktere.

A nagy- és kisbetű-független karakterlánc-ellenőrzéshez a CultureInfo objektumot kell használnunk.


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

Létrehoztam a CultureInfo objektumot a török nyelvhez. És összehasonlítottam mindkét karakterláncot a CompareInfo segítségével, ahogy az alább látható.

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

A legjobb módja a Case insensitive Contains string ellenőrzésnek

Ha a .Net legújabb verzióját használja, használja a string.Contains() módszert.

Ellenkező esetben maradj a string.IndexOf() módszernél.

Ne részesítse előnyben a .ToUpper() vagy a To.Lower() módszert, mivel ezek teljesítményproblémákhoz vezethetnek.

Használja a CultureInfo objektumot más nyelvű karakterláncokhoz.