С# Case insensitive Contains(string)

Задача: Нужно узнать, встречается строка в другой подстроке или нет без учета регистра (Case Insensitive).

Инструменты: C#

Решение: Можно было воспользоваться методом String.Contains, но есть одно но, он выполняет сравнение с учетом регистра и без учета языка и региональных параметров. Для решения данной проблемы создадим метод расширения, который позволит сравнивать строки без учета регистра.

//Source: http://mirsovetov.net/case-insensitive-contains.html
public static class StringExtensions
{
public static bool Contains(this string source, string toCheck, StringComparison options)
{
return source?.IndexOf(toCheck, options) >= 0;
}
public static bool Contains(this string source, string toCheck, RegexOptions options)
{
return Regex.IsMatch(source, Regex.Escape(toCheck), options);
}
}
// How to use indexOf version:
var name = "Some Name";
var contains = name.Contains("name", StringComparison.InvariantCultureIgnoreCase);
//How to use RegExp version:
var name2 = "Some Name";
contains = name2.Contains("name", RegexOptions.IgnoreCase);

Две реализации позволяют более гибко использовать методы сравнения строк. В вариате с регулярными выражениями можно использовать битовую маску для RegexOptions. Например: RegexOptions.IgnoreCase & RegexOptions.IgnorePatternWhitespace & RegexOptions.CultureInvariant;

0

Добавить комментарий