C# Case insensitive Contains string check

In deze tutorial leren we verschillende manieren om case insensitive string contains check te doen in C#

Het lijkt een eenvoudig probleem, maar de standaard C# string.Contains() methode is hoofdlettergevoelig

En als de string niet in het Engels is, dus voor andere talen, kunnen we de tekst niet direct hoofdlettergevoelig vergelijken

Beide strings moeten in dezelfde cultuur zijn en we moeten de taalcultuur kennen.

Meestal vergelijken we alleen strings in het Engels.

Methode 1: C# string.IndexOf() methode gebruiken.

We kunnen de C# string.IndexOf() methode gebruiken om te controleren of een string hoofdlettergevoelig is.

IndexOf() de methode accepteert StringComparison.OrdinalIgnoreCase parameter, die aangeeft welk type zoekactie voor de tekens moet worden gebruikt.


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

Methode 2: string.Contains() methode gebruiken in .Net 5+ & .NET Core 2.0+

In de nieuwste versies van dot net, d.w.z. in .Net Core 2.0+ en .Net 5+. De methode string.Contains() heeft een overloaded methode die StringComparison parameter accepteert.


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

Methode 3: Methode Regex.IsMatch() gebruiken

We kunnen reguliere expressies gebruiken om hoofdletterongevoelige stringcontrole uit te voeren.

Als u bekend bent met Regex, gebruikt u de methode Regex.IsMatch() en om te controleren op hoofdlettergevoeligheid geeft u de parameter RegexOptions.IgnoreCase door

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

//true

Methode 4: Gebruik .ToUpper() & .ToLower()

Als de strings in het Engels zijn en de prestaties geen probleem vormen, kunnen we beide strings naar dezelfde hoofdletters converteren en dan de string bevat controle uitvoeren.


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 voor andere talen

Hoofdlettergevoeligheid is taalafhankelijk

Bijvoorbeeld, in de Engelse taal is I de hoofdletterversie van i.

Terwijl in de Turkse taal de hoofdletterversie van i het onbekende teken İ is.

Voor de hoofdletterloze stringcontrole moeten we het object CultureInfo gebruiken.


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

Ik heb CultureInfo gemaakt voor de Turkse taal. En beide strings vergeleken met CompareInfo zoals hieronder getoond.

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

Best way to do Case insensitive Contains string check

Als u de laatste versie van .Net gebruikt, gebruik dan de methode string.Contains().

Anders blijft u bij de methode string.IndexOf().

Geef niet de voorkeur aan de methode .ToUpper() of To.Lower() omdat deze tot prestatieproblemen kunnen leiden.

Gebruik CultureInfo object voor strings in andere talen.