C# Büyük/Küçük Harfe Duyarsız Dize Kontrolü İçerir

Bu eğitimde, C#’ta büyük/küçük harfe duyarlı olmayan dize içerme kontrolü yapmanın farklı yollarını öğreniyoruz

Basit bir sorun gibi görünüyor, ancak varsayılan C# string.Contains() yöntemi büyük/küçük harfe duyarlıdır

Ve eğer dize İngilizce değilse, yani diğer diller için, metni büyük/küçük harfe duyarsız olarak doğrudan karşılaştıramayız

Her iki dizge de aynı kültürde olmalı ve dil kültürünü bilmeliyiz.

Çoğu zaman dizeleri yalnızca İngilizce dilinde karşılaştıracağız.

Yöntem 1: C# string.IndexOf() yöntemini kullanma.

Büyük/küçük harfe duyarlı olmayan dize içerme kontrolü yapmak için C# string.IndexOf() Metodunu kullanabiliriz.

IndexOf() yöntemi, karakterler için kullanılacak arama türünü belirten StringComparison.OrdinalIgnoreCase parametresini kabul eder.


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

Yöntem 2: .Net 5+ ve .NET Core 2.0+‘da string.Contains() yöntemini kullanma

Nokta net’in en son sürümlerinde, yani .Net Core 2.0+ ve .Net 5+‘da. string.Contains() yöntemi, StringComparison parametresini kabul eden aşırı yüklenmiş bir yönteme sahiptir.


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

Yöntem 3: Regex.IsMatch() yöntemini kullanma

Büyük/küçük harfe duyarlı olmayan dize kontrolü yapmak için düzenli ifadeleri kullanabiliriz.

Regex ile aşinaysanız, Regex.IsMatch() yöntemini kullanın ve büyük/küçük harf duyarsızlığını kontrol etmek için RegexOptions.IgnoreCase parametresini geçin

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

//true

Yöntem 4: .ToUpper() & adresini kullanma .ToLower()

Dizeler İngilizce dilindeyse ve performans bir sorun değilse, her iki dizeyi de aynı büyük/küçük harfe dönüştürebilir ve ardından dize içeriyor kontrolünü yapabiliriz.


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

//true

C# Harfe duyarsız Diğer diller için kontrol içerir

Büyük/küçük harf duyarsızlığı dile bağlıdır

Örneğin, İngilizce dilinde I, i‘un büyük harf versiyonudur.

Türkçe’de ise i ‘un büyük harfli versiyonu yabancı bir karakter olan İ‘dur.

Büyük/küçük harfe duyarlı olmayan dize kontrolü yapmak için CultureInfo nesnesini kullanmamız gerekir.


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

Türkçe dili için CultureInfo nesnesini oluşturdum. Ve aşağıda gösterildiği gibi CompareInfo kullanarak her iki dizeyi karşılaştırdım.

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

Büyük/küçük harfe duyarlı olmayan Contains dizesi denetimi yapmanın en iyi yolu

.Net ‘un en son sürümünü kullanıyorsanız string.Contains() yöntemini kullanın.

Aksi takdirde string.IndexOf() yöntemine bağlı kalın.

Performans sorunlarına yol açabileceğinden .ToUpper() veya To.Lower() yöntemini tercih etmeyin.

Diğer dil dizeleri için CultureInfo nesnesini kullanın.