C# Проверка строки Contains без учета регистра
- Метод 1: Использование метода C#
string.IndexOf(). - Метод 2: Использование метода
string.Contains()в .Net 5+ & .NET Core 2.0+ - Метод 3: Использование метода
Regex.IsMatch() - Метод 4: Использование
.ToUpper()&.ToLower() - C# Проверка содержимого без учета регистра для других языков
- Лучший способ сделать проверку строк Contains без учета регистра
On this page
- Метод 1: Использование метода C#
string.IndexOf(). - Метод 2: Использование метода
string.Contains()в .Net 5+ & .NET Core 2.0+ - Метод 3: Использование метода
Regex.IsMatch() - Метод 4: Использование
.ToUpper()&.ToLower() - C# Проверка содержимого без учета регистра для других языков
- Лучший способ сделать проверку строк Contains без учета регистра
В этом руководстве мы изучаем различные способы выполнения нечувствительной к регистру проверки “строка содержит” в C#
Это выглядит как простая проблема, но метод C# string.Contains() по умолчанию чувствителен к регистру
И если строка не на английском языке, т.е. для других языков, мы не можем сравнивать текст без учета регистра напрямую
Обе строки должны быть одной культуры, и мы должны знать культуру языка.
Чаще всего мы сравниваем строки только на английском языке.
Метод 1: Использование метода C# string.IndexOf().
Мы можем использовать метод C# string.IndexOf() для проверки содержания строки без учета регистра.
IndexOf() метод принимает параметр StringComparison.OrdinalIgnoreCase, который определяет тип поиска символов.
string textToCheck = "STRING Contains";
bool contains = textToCheck.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;
Метод 2: Использование метода string.Contains() в .Net 5+ & .NET Core 2.0+
В последних версиях dot net, т.е. в .Net Core 2.0+ и .Net 5+. Метод string.Contains() имеет перегруженный метод, который принимает параметр StringComparison.
string textToCheck = "STRING Contains";
bool checkContains = textToCheck.Contains("string",StringComparison.OrdinalIgnoreCase);
Метод 3: Использование метода Regex.IsMatch()
Мы можем использовать регулярные выражения для проверки строки contains без учета регистра.
Если вы знакомы с методом Regex, используйте метод Regex.IsMatch(), а для проверки на нечувствительность к регистру передайте параметр RegexOptions.IgnoreCase
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = Regex.IsMatch(stringToCheck, Regex.Escape(substring), RegexOptions.IgnoreCase);
//true
Метод 4: Использование .ToUpper() & .ToLower()
Если строки на английском языке и производительность не является проблемой, мы можем преобразовать обе строки в один регистр, а затем выполнить проверку на наличие строк.
var stringToSearch = "hI hEllo";
var substring = "hello";
bool contains = stringToSearch.ToLower().Contains(substring.ToLower());
or
bool contains = stringToSearch.ToUpper().Contains(substring.ToUpper());
//true
C# Проверка содержимого без учета регистра для других языков
Нечувствительность к регистру зависит от языка
Например, в английском языке I является версией i, написанной в верхнем регистре.
В то время как в турецком языке верхним регистром i является незнакомый символ İ.
Чтобы выполнить проверку строки без учета регистра, нам нужно использовать объект 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
Я создал объект CultureInfo для турецкого языка. И сравнил обе строки с помощью CompareInfo, как показано ниже.
trCulture.CompareInfo.IndexOf(check, text, CompareOptions.IgnoreCase) >= 0;
Лучший способ сделать проверку строк Contains без учета регистра
Если вы используете последнюю версию .Net, используйте метод string.Contains().
В противном случае используйте метод string.IndexOf().
Не используйте метод .ToUpper() или To.Lower(), так как они могут привести к проблемам с производительностью.
Для строк других языков используйте объект CultureInfo.