Регулярные выражения. Создаем свой шаблон для проверки условием.
Что такое регулярные выражения?
Регулярные выражения — наборы символов, применяемых для поиска текстовых строк, соответствующих требуемым условиям. В рамках работы чат-ботов ТХ.Модератора они позволяют проверять полученное сообщение от пользователя на соответствие выражению. Говоря простым языком, использование регулярных выражений позволит создать собственный шаблон проверки текста.
Применение регулярных выражений
Сейчас в конструкторе ботов есть 4 вида готовых шаблонов для проверки ответа пользователя по ним — их я показал на скриншоте ниже. Но также там есть 5 строка — как раз про регулярные выражения.
Благодаря шаблонам бот может проверить текст, полученный от пользователя, в зависимости от того, какой шаблон выберем. Например, если мы ставим условие «В полученном тексте указан только email», бот будет сверять сообщение пользователя со стандартным шаблоном электронных почтовых ящиков. И уже в зависимости от того, прошел ли текст проверку или нет, будет строиться дальнейшая работа бота.
Использование регулярных выражений позволяет значительно расширить вариативность шаблонов для проверки. Допустим, нам нужно убедиться, что пользователь написал индекс, или, например, что он указал дату и время в нужном нам формате, а не как ему вздумается. Тут как раз и придут на помощь регулярные выражения.
Реализация на примере
Предлагаю уже перейти от слов к делу и рассмотреть реальное применение регулярных выражений. При сборке одного из ботов мне потребовалось проверить текст пользователя на соответствие шаблону, которого не было среди предложенных — указание даты и времени в определенном формате.
Мне было важно, чтобы пользователь писал одним сообщением дату и время в формате «26 декабря, 15:00» — вот именно так, со всеми отступами, запятыми и двоеточием. Это нужно было, чтобы потом реализовать поиск этого значения в google-таблице, поэтому все было очень строго.
Как выяснилось, реализовать это оказалось делом не из простых, пришлось посидеть над этой задачкой. Но результат того стоил.
Сам интерфейс этой функции в конструкторе выглядит довольно просто, всего лишь одна ячейка, в которую нам нужно вставить не просто текст, а определенный код.
Прежде чем начать пугать вас тем кодом, который предстоит написать, рассмотрим с точки зрения логики, как должен выглядеть шаблон для нашей ситуации.
Для простоты представим, что X — это какое то число, Y — какая-то буква.
Напомню, мы проверяем введенную строку на соответствие шаблону«»
26 декабря, 15:00
Получаем следующую картину:
XX Y(непонятно точно, сколько будет букв), ХХ:ХХ
Ситуация, надеюсь, проясняется, поэтому пора приступать к тому, чтобы перенести нашу логику на правила языка регулярных выражений. Поэтому давайте рассмотрим синтаксис этого языка. Переписывать сюда все нет смысла, просто перейдите по этой ссылке, там понятно на русском языке описан весь основной синтаксис. Но на всякий случай, чтобы не переключаться по вкладкам, прикреплю скриншоты.



Теперь когда мы выстроили логику нашего будущего шаблона, посмотрели синтаксис, пора уже сделать работающее регулярное выражение. Выглядеть по итогу оно будет так:
\d\d \D+, \d\d:\d\d
Тут у нас:
\d = цифровой символ
\D = нецифровой символ (т.е. буква)
\D+ = букв больше одной
, : = запятая и двоеточие
пробел = пробел
Ну и теперь, подставив полученную символьную строчку в нужное поле, мы можем быть довольны результатом!
Если же разобраться в этом более детально, то можно понять, что полученное нами символьное выражение не совсем верное, ведь \D может заменяться не только буквой, это - нецифровой символ, то есть, он пропустит любые символы, кроме цифр: _-\., и тд.
Да и мы использовали не все возможности синтаксиса, например {}, благодаря которым можно указать кол-во повторений символа. Также есть [], в которых можно просто перечислить диапазон символов, которые должны пройти проверку.
Итоговый вариант станет вот таким:
\d{1,2} [а-я]+, \d{1,2}:\d{2}
Тут у нас:
\d = цифровой символ
\d{1,2} = 1 или 2 цифровых символа
[а-я]+ = одна и более букв на латинице
, : = запятая и двоеточие
пробел = пробел
В данном случае мы делаем еще более строгую проверку, прошлое выражение было не идеальным так как не смогло бы отработать верно такое выражение:
2 мая, 8:00
Хотя по логике все было бы верно, но отсутствие нулей перед 2 и 8 сломало бы нашу логику проверки.
А если интересно посмотреть, для чего необходимо было создавать данный шаблон и как он работает на практике — рекомендую посмотреть запись эфира:
https://vk.com/video-187822477_456239127
___________________________________________________________________________________________Нужна помощь в создании ботов — пиши мне в личные сообщения или переходи в сообщество.
