Как посимвольно сравнить строку со списком валидных символов, среди которых есть эмоджи?

ребята!

Пилю телеграм бота.

Вопрос звучит следующим образом: Как мне посимвольно сравнить сообщение от юзера со списком валидных символов, среди которых есть эмоджи?

Задача по идее стоит простая до безумия. И до безумия сложна как для меня в реализации оказалась. Если юзер отправляет фиговые с точки зрения бота символы-буквы, неликвидные эмодзи, которые связка скриптов не может обработать, отправляем юзеру сообщение, мол этот символ удали или замени.

Пытаюсь сравнить посимвольно строку от юзера

string message.Text 

со списком валидных символов

List<string> validCharacters.

В предыдущий раз я пошел следующим образом. Преобразовал строку в символы char

char[] characters = message.Text.ToCharArray();

Преобразовал строковый список

List<string> validCharacters = new List<string>() { "?" };

в char список

List<char> validCharactersChar

и проверяю каждый символ из сообщения юзера есть ли он в списке валидных символов

for (int i = 0; i < characters.Length; i++)
                    {
                        // если символ НЕ содержится в списке валидных символов, просим переводчика удалить символ.
                        bool check = validCharactersChar.Contains(characters[i]);
                        if (!check)
                        {
                            // Символ ... не содержится в списке допустимых символов. Просьба удалить его.
                            telegramMessage = $"Мне не нравится символ <b>{i.ToString()} {characters[i].ToString()}</b>\nПросьба удалить его.";
                            await bot.SendTextMessageAsync(message.Chat.Id, telegramMessage, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
                            return;
                        }

                    }

суть в том, что эмодзи может быть не одним символом, а несколькими. И тогда в случае когда эмодзи не ликвидный, задача становится еще сложнее, поскольку нужно собрать в кучу символы, которые составляют смайл, преобразовать в строку-смайл и отправить обратно юзеру с просьбой заменить или удалить. Преобразование символов в смайл нужно будет делать с помощью какой-то библиотеки смайлов-эмоджи, а они все не полные. Постоянно пополняются, дорисовываются и т.д. ((

Полный код, которые реализован и бесполезен:

// 6. Проверка валидности каждого символа
                    List<string> validCharacters = new List<string>() { "?" };
                    List<char> validCharactersChar = new List<char>();
                    foreach (string a in validCharacters)
                    {
                        var charArr = a.ToCharArray();
                        foreach (char c in charArr)
                            validCharactersChar.Add(c);
                    }




                    char[] characters = message.Text.ToCharArray();

                    for (int i = 0; i < characters.Length; i++)
                    {
                        // если символ НЕ содержится в списке валидных символов, просим переводчика удалить символ.
                        bool check = validCharactersChar.Contains(characters[i]);
                        if (!check)
                        {
                            // Символ ... не содержится в списке допустимых символов. Просьба удалить его.
                            telegramMessage = $"Мне не нравится символ <b>{i.ToString()} {characters[i].ToString()}</b>\nПросьба удалить его.";
                            await bot.SendTextMessageAsync(message.Chat.Id, telegramMessage, parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
                            return;
                        }
                    }

                    await bot.SendTextMessageAsync(message.Chat.Id, "Проверка пройдена", parseMode: Telegram.Bot.Types.Enums.ParseMode.Html);
                    return;

Короче вопрос!!! Как мне посимвольно сравнить сообщение от юзера со списком валидных символов, среди которых есть эмоджи?


Ответы (0 шт):