C# Case insensitive Contains string check
- Metoda 1: Użycie metody C#
string.IndexOf(). - Metoda 2: Używanie metody
string.Contains()w .Net 5+ & .NET Core 2.0+ - Metoda 3: Użycie metody
Regex.IsMatch() - Metoda 4: Użycie
.ToUpper()&.ToLower() - C# Case insensitive Contains check dla innych języków
- Najlepszy sposób, aby zrobić Case insensitive Contains string check
On this page
- Metoda 1: Użycie metody C#
string.IndexOf(). - Metoda 2: Używanie metody
string.Contains()w .Net 5+ & .NET Core 2.0+ - Metoda 3: Użycie metody
Regex.IsMatch() - Metoda 4: Użycie
.ToUpper()&.ToLower() - C# Case insensitive Contains check dla innych języków
- Najlepszy sposób, aby zrobić Case insensitive Contains string check
W tym tutorialu uczymy się różnych sposobów, aby zrobić case insensitive string contains check w C#
Wygląda to na prosty problem, ale domyślna metoda C# string.Contains() jest wrażliwa na wielkość liter
A jeśli ciąg nie jest w języku angielskim, tzn. dla innych języków, nie możemy porównać tekstu z rozróżnianiem wielkości liter bezpośrednio
Oba ciągi powinny być w tej samej kulturze i powinniśmy znać kulturę języka.
W większości przypadków będziemy porównywać ciągi tylko w języku angielskim.
Metoda 1: Użycie metody C# string.IndexOf().
Możemy użyć metody C# string.IndexOf(), aby sprawdzić czy łańcuch zawiera wielkość liter.
IndexOf() metoda przyjmuje parametr StringComparison.OrdinalIgnoreCase, który określa typ wyszukiwania znaków.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Metoda 2: Używanie metody string.Contains() w .Net 5+ & .NET Core 2.0+
W najnowszych wersjach dot net, czyli w .Net Core 2.0+ i .Net 5+. Metoda string.Contains() posiada przeciążoną metodę, która akceptuje parametr StringComparison.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Metoda 3: Użycie metody Regex.IsMatch()
Możemy użyć wyrażeń regularnych, aby wykonać niewrażliwe na wielkość liter sprawdzenie contains string.
Jeśli jesteś zaznajomiony z Regex, użyj metody Regex.IsMatch() i aby sprawdzić niewrażliwość na wielkość liter przekaż parametr RegexOptions.IgnoreCase
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Metoda 4: Użycie .ToUpper() & .ToLower()
Jeśli łańcuchy są w języku angielskim i wydajność nie jest problemem, możemy przekonwertować oba łańcuchy na ten sam przypadek, a następnie wykonać sprawdzenie string contains.
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 dla innych języków
Niewrażliwość na wielkość liter jest zależna od języka
Na przykład, w języku angielskim I jest wielką literą wersji i.
Natomiast w języku tureckim duża litera wersji i to nieznany znak İ.
Aby wykonać sprawdzenie łańcucha bez uwzględniania wielkości liter musimy użyć obiektu 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
Stworzyłem obiekt CultureInfo dla języka tureckiego. I porównałem oba ciągi za pomocą CompareInfo, jak pokazano poniżej.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Najlepszy sposób, aby zrobić Case insensitive Contains string check
Jeśli używasz najnowszej wersji .Net użyj metody string.Contains().
W przeciwnym razie trzymaj się metody string.IndexOf().
Nie preferuj metody .ToUpper() lub To.Lower(), ponieważ mogą one prowadzić do problemów z wydajnością.
Użyj obiektu CultureInfo dla ciągów w innych językach.