C# Kasus tidak sensitif berisi pemeriksaan string
Dalam tutorial ini kita belajar berbagai cara untuk melakukan pengecekan case insensitive string contain di C#
Sepertinya ini adalah masalah yang sederhana, tetapi metode default C# string.Contains()
adalah case sensitive
Dan jika string tidak dalam bahasa Inggris, misalnya, untuk bahasa lain, kita tidak dapat membandingkan teks case insensitive secara langsung
Kedua string harus dalam budaya yang sama dan kita harus tahu budaya bahasanya.
Sering kali kita akan membandingkan string dalam bahasa Inggris saja.
Metode 1: Menggunakan metode C# string.IndexOf()
.
Kita bisa menggunakan metode C# string.IndexOf()
untuk melakukan pengecekan isi string yang case insensitive.
IndexOf()
metode ini menerima parameter StringComparison.OrdinalIgnoreCase
, yang menentukan jenis pencarian yang akan digunakan untuk karakter.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Metode 2: Menggunakan metode string.Contains()
di .Net 5+ & .NET Core 2.0+
Dalam versi terbaru dot net, yaitu, di .Net Core 2.0+ dan .Net 5+. Metode string.Contains()
memiliki metode overloaded yang menerima parameter StringComparison
.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Metode 3: Menggunakan metode Regex.IsMatch()
Kita bisa menggunakan ekspresi reguler untuk melakukan pengecekan string contain yang case insensitive.
Jika anda sudah familiar dengan Regex
, Gunakan metode Regex.IsMatch()
dan untuk memeriksa case insensitive pass RegexOptions.IgnoreCase
parameter
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Metode 4: Menggunakan .ToUpper()
& .ToLower()
Jika string dalam bahasa Inggris dan kinerjanya tidak menjadi masalah, kita dapat mengubah kedua string ke kasus yang sama kemudian melakukan pemeriksaan string berisi.
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());
//true
C# Pemeriksaan Contains yang tidak sensitif terhadap kasus untuk bahasa lain
Ketidakpekaan kasus tergantung pada bahasa
Sebagai contoh, dalam bahasa Inggris I
adalah versi huruf besar dari i
.
Sedangkan dalam bahasa Turki versi huruf besar dari i
adalah karakter yang tidak dikenal İ
.
Untuk melakukan pengecekan string case insensitive kita perlu menggunakan objek 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
Saya telah membuat objek CultureInfo
untuk bahasa Turki. Dan membandingkan kedua string menggunakan CompareInfo
seperti yang ditunjukkan di bawah ini.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Cara terbaik untuk melakukan pengecekan Case insensitive Contains string
Jika Anda menggunakan versi terbaru dari .Net
gunakan metode string.Contains()
.
Jika tidak, tetap gunakan metode string.IndexOf()
.
Jangan memilih metode .ToUpper()
atau To.Lower()
karena dapat menyebabkan masalah kinerja.
Gunakan objek CultureInfo
untuk string bahasa lain.