#c_sharp
Есть в C# готовые методы проверки по типу var culture = new CultureInfo("ru"); var text = "hello world"; var isRu = text.Of(culture); //false
Ответы
Ответ 1
Если ваша задача проверить принадлежность символов строки к определенному алфавиту (без учета валидности слов в каком-то языке), то давайте напишем такой простой класс с методами-расширения: public static class CultureHelper { static readonly string whitespaceChars = @" .,-()!?"; static readonly string cyrillicChars = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; public static bool IsCyrillicText(this string s) { return s.All(c => cyrillicChars.Contains(c) || whitespaceChars.Contains(c)); } } Изпользование: Console.WriteLine("Привет, мир!".IsCyrillicText()); Console.WriteLine("Hello, world!".IsCyrillicText()); Console.WriteLine("Привет, John!".IsCyrillicText()); Вывод: True False FalseОтвет 2
В платформе .NET очень мощные регулярные выражения. Для поставленной задачи можно применить общие категории Юникода и именованные блоки. Сдалем метод расширения, как в ответе Андрея. Только вместо вручную заданных диапазонов символов возьмём готовые. public static class CultureHelper { public static bool IsCyrillicText(this string s) { return s.Where(c => Regex.IsMatch(c.ToString(), @"\p{L}")) .All(c => Regex.IsMatch(c.ToString(), @"\p{IsCyrillic}")); } } Console.WriteLine("Привет, мир!".IsCyrillicText()); // True Console.WriteLine("Hello, world!".IsCyrillicText()); // False Console.WriteLine("Привет, John!".IsCyrillicText()); // False Метод сперва отфильтровывает из текста только буквы, потом проверяет их на принаделжность к нужной группе. Это гарантирует корректную работу с любыми символами Юникода.
Комментариев нет:
Отправить комментарий