C# Проверка на низа Contains без отчитане на регистрите
- Метод 1: Използване на метода C#
string.IndexOf()
. - Метод 2: Използване на метода
string.Contains()
в .Net 5+ и .NET Core 2.0+ - Метод 3: Използване на метода
Regex.IsMatch()
- Метод 4: Използване на
.ToUpper()
&.ToLower()
- C# Проверка на съдържания без отчитане на регистъра за други езици
- Най-добрият начин за извършване на проверка на съдържащите се низове без отчитане на регистрите
On this page
- Метод 1: Използване на метода C#
string.IndexOf()
. - Метод 2: Използване на метода
string.Contains()
в .Net 5+ и .NET Core 2.0+ - Метод 3: Използване на метода
Regex.IsMatch()
- Метод 4: Използване на
.ToUpper()
&.ToLower()
- C# Проверка на съдържания без отчитане на регистъра за други езици
- Най-добрият начин за извършване на проверка на съдържащите се низове без отчитане на регистрите
В този урок научаваме различни начини за извършване на проверка на съдържащ се низ без отчитане на регистрите в 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()
Можем да използваме регулярни изрази, за да направим проверка на съдържащите се низове без значение на регистъра.
Ако сте запознати с 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;
Най-добрият начин за извършване на проверка на съдържащите се низове без отчитане на регистрите
Ако използвате последната версия на .Net
, използвайте метода string.Contains()
.
В противен случай се придържайте към метода string.IndexOf()
.
Не предпочитайте методите .ToUpper()
или To.Lower()
, тъй като те могат да доведат до проблеми с производителността.
Използвайте обекта CultureInfo
за низове на други езици.