Как использовать регулярные выражения в чат-ботах
Регулярные выражения — это шаблоны, которые используются, когда недостаточно предустановленных способов валидации для сравнения полученного значения от подписчика с шаблонным значением.
К примеру, вы можете использовать регулярные выражения для проверки фразы на ключевые слова и количество слов, наличие пробелов и других символов, а также ввода чисел в определенном промежутке значений или проверки на соответствие ссылки на аккаунт в соцсети.
В статье рассмотрим основной синтаксис и примеры составления выражений.
Синтаксис регулярного выражения
Вы можете составить регулярное выражение из обычных символов, например, /abc/
, или комбинировать обычные и специальные символы, например, /ab*c/
.
В таблицах ниже вы можете ознакомиться с основными символами, которые используются при составлении регулярного выражения.
Специальные символы
\ |
Экранирующий символ. Указывает на то, что следующий символ является литералом, а не мета-символом. Например, \* соответствует звездочке в качестве литерала, а не квантора повторения |
\n |
Новая строка. Используется для поиска перевода строк. Например, /\n/ соответствует переводу строки в строке
«Work hard. Dream big». |
\t |
Табуляция. Используется для поиска символа горизонтальной табуляции в строках (символ ASCII 9). |
\v |
Вертикальная табуляция. Cоответствует любому вертикальному пробельному символу. |
\f |
Новая страница. Соответствует символу ASCII 12. |
Якоря
^ |
Начало строки. Например, /^B/ не соответствует «B» в «a B», но соответствует в «B a». |
$ |
Конец строки. Например, /k$/ не соответствует «k» в строке «walker», но соответствует строке «walk». |
\b |
Граница слова. Например, /\bpump/ соответствует «pump» в слове «pumpkin». |
Символьные классы
\s |
Пробел. Например, /\s/ соответствует первому символу пробела в строке «that sounds amazing». Если использовать флаг глобального поиска g , то выражение /\s/g соответствует двум символам пробела в строке «that sounds amazing». |
\d |
Цифра. Равен первой цифре в строке. Эквивалентно выражению /[0-9]/ . Например, /\d/ соответствует символу «2», но не соответствует символу «B» в строке «B2 is the suite number». |
\D |
Не цифра. Равен первой букве в строке. Эквивалентно выражению /[^0-9]/ . Например, /\D/ соответствует символу «B», но не соответствует символу «2» в строке «B2 is the suite number». |
\w |
Слово. Соответствует любому первому цифробуквенному символу, включая нижнее подчеркивание. Эквивалентно выражению /[A-Za-z0-9_]/ . Например, /\w/ соответствует «b» в строке «bench» и «3» в строке «$3.52». |
\W |
Не слово. Соответствует любому первому не цифробуквенному символу. Эквивалентно выражению /[^A-Za-z0-9_]/ .
Например, |
Кванторы
* |
0 или больше. Соответствует предыдущему символу, который повторили 0 или более раз. Эквивалентно выражению /{0,}/ . Например, /les*/ соответствует «less» в строке «Endless love» и «le» в строке «let it be». |
+ |
1 или больше. Соответствует предыдущему символу, который повторили 1 или более раз. Эквивалентно выражению /{1,}/ .
Например, |
? |
0 или 1. Соответствует предыдущему символу, который повторили 0 или 1 раз. Эквивалентно выражению /{0,1}/ . Например, /colou?r/ соответствует и «color», и «colour», или /mo?ustache/ соответствует и «moustache», и «mustache» |
{n} |
Точно N раз. Например, /a{2}/ не соответствует «a» в строке «sugar», но соответствует двум «а» в строке «sugaar» и первым двум «а» в строке «sugaaar». |
{n,m} |
Минимум N и максимум M раз. Например, /a{1,3}/ ничему не соответствует в строке «sugr», но соответствует символу «a» в строке «sugar», двум «а» в строке «sugaar», и трем первым «а» в строке «sugaaaaaaaar». |
Диапазоны
. |
Любой символ, кроме переноса строки (/\n/ ). Например, /.e/ соответствует «ke» в строке «Take care!». Если использовать флаг глобального поиска g , то выражение /.e/g соответствует «ke» и «re» в строке «Take care!». |
(a|b) |
a или b. Например, /(green|red)/ соответствует «green» в строке «green or red apple?», а /(red|green)/ соответствует «red» в строке «green or red apple?». |
(...) |
Группа символов. Например, /(...e)/ соответствует «Have» в строке «Have a nice day!». Если использовать флаг глобального поиска g , то выражение /(...e)/g соответствует «Have» и «nice» в строке «Have a nice day!». |
[abc] |
a, или b, или c. Например, /[abcd]/ соответствует символу «b» в строке «basket». Если использовать флаг глобального поиска g , то выражение /[abcd]/g соответствует символам «b» и «a» в строке «basket». |
[a-q] |
Буква между a и q в нижнем регистре. Например, /[e-m]/ соответствует символу «k» в строке «basket». Если использовать флаг глобального поиска g , то выражение /[e-m]/g соответствует символам «k» и «e» в строке «basket». |
[A-Q] |
Буква между A и Q в верхнем регистре. Например, /[E-M]/ соответствует символу «K» в строке «BASKET». Если использовать флаг глобального поиска g , то выражение /[E-M]/g соответствует символам «K» и «E» в строке «BASKET». |
[^abc] |
Не a, не b и не c. Например, /[^abcd]/ соответствует символу «s» в строке «basket». Если использовать флаг глобального поиска g , то выражение /[^abcd]/g соответствует символам «s», «k», «e» и «t» в строке «basket». |
[^a-q] |
Любая буква в нижнем регистре, не входящая в диапазон от a до q. Например, /^[e-m]/ соответствует символу «b» в строке «basket». Если использовать флаг глобального поиска g , то выражение /^[e-m]/g соответствует символам «b», «a», «s» и «t» в строке «basket». |
[0-9] |
Цифра между 0 и 9. Например, /[1-5]/ соответствует цифре «2» в строке «B255 is the suite number». Если использовать флаг глобального поиска g , то выражение /[1-5]/g соответствует цифрам «2», «5», и «5» в строке «B255 is the suite number». |
Флаги
Флаги указываются после регулярного выражения. Порядок флагов значения не имеет.
g |
Глобальный поиск. Например, /m/g соответствует двумя символам «m» в строке «moments». Без флага g шаблон /m/ соответствует первому символу «m» в строке «moments». |
i |
Регистронезависимый поиск. Например, /m/i соответствует символу «M» в строке «Moments». Без флага i шаблон /m/i не соответствует символу «M» в строке «Moments». |
m |
Многострочный текст. Например, /^\D/gm соответствует символам «W» и «D» в строках
«Work hard. Dream big.» Пояснение: |
s |
Считать текст одной строкой. Текст трактуется, как одна строка, в этом случае мета-символу «.» соответствует любой одиночный символ, включая символ новой строки.
Пояснение: если в регулярном выражении есть точка (.) с флагом |
Мета-символы
Мета-символы — это те символы, которые не являются буквами или цифрами, а несут определенную роль в синтаксисе регулярного выражения. Например, *
— квантор повторений.
Чтобы использовать мета-символ по другому назначению, его нужно экранировать. Например, чтобы символ *
перестал быть квантором повторений, а означал именно символ звездочки.
Экранирование делается с помощью символа \
— обратного слеша. Например, \.
, \/
, \*
и так далее.
С символами, которые необходимо экранировать, вы можете ознакомиться в таблице ниже.
^ | [ | . | $ | { | * | ( |
\ | + | ) | | | ? | < | > |
Более подробно ознакомиться с синтаксисом регулярных выражений можно в таблице на сайте exlab.net.
Как использовать регулярные выражения в конструкторе чат-ботов SendPulse
Перетащите элемент Сообщение из левой панели конструктора чат-ботов. Активируйте опцию Ждать ответа подписчика. Выберите валидацию Регулярное выражение.
В поле Регулярное выражение введите свое выражение. Мы рассмотрим пример выражения для проверки фразы на два слова — имя и фамилию.
Составить и проверить регулярное выражение на валидность можно на сайте regex101. Там же в разделе Regex Library вы можете найти шаблоны часто используемых выражений с пояснениями.
Введите сообщение, которое отобразится при неправильном вводе данных. Вы можете использовать переменные и эмодзи.
Рекомендуем менять стандартное сообщение про ошибку и указывать в тексте, что вы желаете получить в ответ с примером значения, чтобы пользователю было проще сориентироваться и предоставить нужные данные.
Выберите переменную, в которую вы хотите сохранить ответ, или создайте новую, нажав на Создать переменную.
Не забывайте выставлять период ожидания ответа, чтобы не блокировать пользователю надолго возможность ввести какие-то другие значения, кроме тех, которые вы запросили.
Обратите внимание: когда блок Ввод данных ожидает ответ, запуск на другие цепочки по триггерам и по клику в меню не работает.
Вы также можете использовать быстрые ответы для типа валидации Регулярное выражение, чтобы помочь пользователю с предустановленными ответами.
Нажмите Применить.
Как выглядит валидация данных в мессенджере
Пример использования регулярных выражений для количественной проверки введения фразы из любых двух слов /^[^\s]*\s[^\s]*$/
Если подписчик введет неверное количество слов, ему отобразится сообщение о неправильном вводе данных. При вводе правильного количества слов, подписчику отобразится сообщение об успехе.
Пример использования регулярных выражений для опросников с закрытыми утверждениями Да и Нет.
В блок Сообщение добавляем вопрос, две кнопки и ввод пользовательских данных с регулярным выражением ^(?:Да|Нет|)$
, где после ?:
вводим значения, которые желаем получить и записать в переменную, |
— оператор или, ^
и $
обозначают начало и конец строки. Если пользователь не нажмет на одну из кнопок, а введет свой текст, который тоже не относится к ожидаемому ответу, сообщение при неправильном вводе данных напомнит ввести или нажать одно из утверждений.
Пример использования регулярных выражений для запроса электронного адреса на домене gmail.com.
В блок Сообщение добавляем вопрос и ввод пользовательских данных с регулярным выражением (\w|^)[\w.\-]{0,25}@(gmail)\.com(\w|$)
и корректируем сообщение про ошибку. Расшифровку смотрите ниже.
Если пользователь введет емейл на другом домене, который не gmail.com, сообщение при неправильном вводе данных напомнит ввести почту на домене gmail.com для получения доступа в Google документам.
Обратите внимание, что данные, записанные с помощью регулярных выражений, записываются в переменные типа Строка. На них нельзя будет отправить рассылки в сервисе. Чтобы собрать контактные данные для отправки сообщений, используйте тип ввода данных Email и Phone.
Ответы с данными от пользователей сохраняются в переменные аудитории чат-бота. Вы можете просматривать сохраненные ответы на вкладке Аудитория, использовать переменные во всех последующих текстовых сообщениях, а также создавать рассылки с сегментацией.
Примеры регулярных выражений
Для проверки даты в формате ДД/ММ/ГГГГ:
/\d{1,2}\/\d{1,2}\/\d{4}/
Пояснение:
\d |
Ожидает ввод любых цифр, |
{1,2} |
которых может быть одна или две ({1,2} ). |
\. |
Экранирование знака . , чтобы воспринимался как обычная точка |
Для проверки даты в формате ДД.ММ.ГГГГ:
/\d{1,2}\.\d{1,2}\.\d{4}/
Пояснение:
\d |
Ожидает ввод любых цифр, |
{1,2} |
которых должно быть одна или две. |
\. |
Экранирование знака . , для того чтобы воспринимался как обычная точка, |
{4} |
которых должно быть четыре. |
Для проверки на одно слово в строке:
/^[^\s]*$/
Пояснение:
^ |
Начало строки. |
[^\s] |
Ожидает ввода любого символа, без пробела после каждого символа. |
* |
0 или больше раз. |
$ |
Конец строки. |
Для проверки на два слова в строке:
/^[^\s]*\s[^\s]*$/
Пояснение:
^ |
Начало строки. |
[^\s] |
Ожидает ввода любого символа, без пробела после каждого символа. |
* |
0 или больше раз. |
\s |
Пробел. |
[^\s] |
Ожидает ввода любого символа, без пробела после каждого символа. |
* |
0 или больше раз. |
$ |
Конец строки. |
Для проверки на три слова в строке:
/^([^\s]*\s){2}[^\s]*$/
Пояснение:
^ |
Начало строки. |
([^\s]*\s){2}) |
Два слова ({2} ), каждое из которых состоит из любых символов, без пробела после каждого символа ([^\s] ), которых может быть 0 или больше раз (* ); в конце каждого слова — пробел (\s ). |
[^\s] |
Любой символ, без пробела после каждого символа. |
* |
0 или больше раз. |
$ |
Конец строки. |
Для проверки совпадения конкретного слова: (например, «Да» и «Нет» с разным регистром):
/^(?:Да|да|ДА|Нет|нет|НЕТ)$/
Пояснение:
^ |
Начало строки. |
?: |
Ожидает ввода слов, которые совпадут с теми, которые ввели |
Да|да|ДА|Нет|нет|НЕТ |
Слова «Да», «да», «ДА», «Нет», «нет», «Нет» , на совпадение которым проверяется |
$ |
Конец строки. |
Регулярное выражение для проверки серии и номера паспорта (в виде двух букв и шести цифр без пробела для старого образца или xxxxxxxx-xxxxx для нового образца):
/^([A-Z]{2}[0-9]{6})?$|[0-9]{8}[\s\-]?[0-9]{5}?$/
Пояснение:
^ |
Начало строки. |
([A-Z]{2}[0-9]{6})? |
Строка, которая может повторится 0 или 1 раз (? ), которая состоит из двух символов ({2} ) между A и Z ([A-Z] ), после которых идут шесть ({6} ) любых цифр от 0 до 9 ([0-9] ). |
$ |
Конец строки. |
| |
Оператор или . |
[0-9]{8} |
Восемь ({8} ) любых цифр от 0 до 9([0-9] ). |
[\s\-]? |
Пробел и тире ([\s\-] ), которая может повторится 0 или 1 раз. |
[0-9]{5} |
Пять ({5} ) любых цифр от 0 до 9 ([0-9] ). |
$ |
Конец строки. |
Для проверки ИНН (из 10 или 12 цифр):
/^(([0-9]{12})|([0-9]{10}))?$/
Пояснение:
^ |
Начало строки. |
[0-9]{12} |
Двенадцать ({12} ) любых цифр в промежутке от 1 до 9 ([0-9] ). |
| |
Оператор или . |
[0-9]{10} |
Десять ({10} ) любых цифр от 0 до 9 ([0-9] ) |
? |
которые могут повторится 0 или 1 раз. |
$ |
Конец строки. |
Для проверки номера банковской карточки в формате xxxx-xxxx-xxxx-xxxx:
/\d{4}[\s\-]?\d{4}[\s\-]?\d{4}[\s\-]?\d{4}/
Пояснение:
\d |
Ожидает ввод любых цифр. |
{4} |
Которых может быть только четыре. |
[\s\-]? |
Пробел и тире, которые могут повторяться 0 или 1 раз. |
Для проверки адреса электронной почты на доменах (например, чтобы делиться документами в Google аккаунте на адрес gmail.com):
/(\w|^)[\w.\-]{0,25}@(gmail)\.com(\w|$)/
Пояснение:
(\w|^) |
Первая группа, где \w — соответствует любому текстовому символу, ^ утверждает позицию в начале строки. |
[\w.\-] |
Соответствует одному символу из списка, где \w — соответствует любому текстовому символу, . соответствует знаку . и . соответствует знаку - |
{0,25} |
которых может быть от 0 до 25 штук. |
(gmail) |
Соответствует слову gmail . |
\. |
Соответствует символу . |
com |
Соответствует слову com . |
(\w|$) |
Третья группа, где \w — соответствует любому текстовому символу, | — оператор «или», $ утверждает позицию в конце строки. |
Обновлено: 26.06.2024
или