Як використовувати регулярні вирази в чат-ботах
Регулярні вирази — це шаблони, які використовуються, коли недостатньо встановлених способів валідації для порівняння отриманого значення підписника з шаблонним значенням.
Наприклад, ви можете використовувати регулярні вирази для перевірки фрази на ключові слова та кількість слів, наявність пробілів та інших символів, а також введення чисел у певному проміжку значень або перевірки на відповідність посилання на обліковий запис у соцмережі.
Синтаксис регулярного
Ви можете скласти регулярний вираз зі звичайних символів, наприклад /ab*c/
.
У нижченаведених таблицях ви можете ознайомитися з основними символами, які використовуються при складанні регулярного виразу.
Спеціальні символи
\ |
Екрануючий символ. Вказує на те, що наступний символ є літералом, а не мета-символом. Наприклад, \* відповідає зірочці як літерал, а не квантор повторення. |
\n |
Новий рядок. Використовується для пошуку перекладу рядків. Наприклад, /\n/ відповідає перекладу рядка у рядку
«Work hard. Dream big». |
_ |
Табуляція. Використовується для пошуку символу горизонтальної табуляції у рядках (символ ASCII 9). |
\v |
Вертикальна табуляція. Відповідає будь-якому вертикальному символу пробілу. |
\f |
Нова сторінка. Відповідає символу ASCII 12. |
Якоря
^ |
Початок рядка. Наприклад, /^B/ не відповідає «B» в «a B», але відповідає в «Ba». |
$ |
Кінець рядка. Наприклад, /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,}/ .
Наприклад, |
? |
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 sketвідповідає символам «b» і «a» у рядку «ba». |
[aq] |
Літера між a та q у нижньому регістрі. Наприклад, /[em]/ відповідає символу «k» у рядку «basket». Якщо використовувати прапор глобального пошуку g , то вираз /[em]/g відповідає символам «k» і «e» у рядку «basket». |
[AQ] |
Літера між A і Q у верхньому регістрі. Наприклад, /[EM]/ відповідає символу «K» у рядку «BASKET». Якщо використовувати прапор глобального пошуку g , то вираз /[EM]/g відповідає символам «K» та «E» у рядку «BASKET». |
[^abc] |
Не a, не b і c. Наприклад, /[^abcd]/ відповідає символу «s» у рядку «basket». Якщо використовувати прапор глобального пошуку g , то вираз /[^abcd]/g відповідає символам «s», «k», «e» і «t» у рядку «basket». |
[^aq] |
Будь-яка літера в нижньому регістрі, що не входить у діапазон від a до q. Наприклад, /^[em]/ відповідає символу «b» у рядку «basket». Якщо використовувати прапор глобального пошуку g , то вираз /^[em]/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
Перетягніть елемент Повідомлення (Message) з лівої панелі конструктора чат-ботів. Активуйте опцію Чекати на відповідь підписника (Wait for the subscriber’s response). Виберіть валідацію Регулярний вираз (Regular Expression).
У полі Регулярний вираз (Regular Expression) введіть свій вираз. Ми розглянемо приклад виразу для перевірки фрази на два слова – ім'я та прізвище.
Скласти та перевірити регулярний вираз на валідність можна на сайті regex101. Там же в розділі Regex Library ви можете знайти шаблони виразів, що часто використовуються, з поясненнями.
Введіть повідомлення, яке з'явиться під час неправильного введення даних. Ви можете використовувати змінні та емодзі.
Рекомендуємо змінювати стандартне повідомлення про помилку та вказувати в тексті, що ви бажаєте отримати у відповідь з прикладом значення, щоб користувачеві було простіше зорієнтуватися та надати потрібні дані.
Виберіть змінну, в яку ви хочете зберегти відповідь, або створіть нову, натиснувши Створити змінну (Create variable).
Не забувайте виставляти період очікування відповіді, щоб не блокувати користувачеві надовго можливість запровадити якісь інші значення, окрім тих, які ви запросили.
Зверніть увагу: коли блок Чекати відповідь підписника очікує на відповідь, запуск на інші ланцюжки по тригерах і по кліку в меню не працює.
Натисніть кнопку Застосувати.
Як виглядає валідація даних у месенджері
Приклад використання регулярних виразів для кількісної перевірки введення фрази з будь-яких двох слів /^[^\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} |
яких має бути одна чи дві ({ 1,2} ) |
\. |
екранування знака «.», щоб сприймався як звичайна точка |
{4} |
яких має бути чотири ({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 для нового зразка):
/^([AZ]{2}[0-9]{6})?$|[0-9]{8} [\s\-]?[0-9]{5}?$/
Пояснення:
^ |
Початок рядка. |
([AZ]{2}[0-9]{6})? |
Рядок, який може повторитися 0 або 1 раз (? ), який складається з двох символів ({2} ) між A і Z ([AZ] ), після яких йдуть шість ({6} ) будь-яких цифр ([0-9 ] ). |
$ |
Кінець рядка. |
| |
Або. |
[0-9] {8} |
Вісім ({8} ) будь-яких цифр ([0-9] ). |
[\s\-]? |
Пробіл і тире ([\s\-] ), яка може повторитися 0 або 1 раз. |
[0-9] {5} |
П'ять ({5} ) будь-яких цифр ([0-9] ) |
? |
Набір з 8 цифр, тире і 5 цифр який може повториться 0 або 1 раз |
$ |
Кінець рядка. |
Для перевірки ІПН (з 10 або 12 цифр):
/^(([0-9]{12})|([0- 9] {10}))?$/
Пояснення:
^ |
Початок рядка. |
[0-9] {12} |
Дванадцять ({12} ) будь-яких цифр в проміжку від 1 до 9 ([0-9] ) |
| |
або |
[0-9] {10} | Десять ({10} ) будь-яких цифр ([0-9] ) |
? |
які можуть повторитися 0 або 1 раз. |
$ |
Кінець рядка. |
Для перевірки номера банківської картки у форматі xxxx-xxxx-xxxx-xxxx:
/\d{4}[\s\-]?\d{4}[\s\- ]?\d{4}[\s\-]?\d{4}/
Пояснення:
\d |
Чекає введення будь-яких цифр; |
{4} |
яких може бути лише чотири. |
[\s\-]? |
Пробіл і тире, які можуть повторюватися 0 або. |
Для перевірки адреси електронної пошти на доменах (наприклад, щоб ділитися документами в Google обліковому записі на адресу gmail.com):
/(\w|^)[\w.\-]{0,25}@(gmail)\.com(\w|$)/
Пояснення:
(\w|^) |
перша захоплююча група, де \w - відповідає будь-якому текстовому символу, ^ затверджує позицію на початку рядка. |
[\w.\-] |
відповідає одному символу зі списку, де \w - відповідає будь-якому текстовому символу, . відповідає знаку «.» та . відповідає знаку «-». |
{0,25} |
яких може бути від 0 до 25 штук. |
@ |
відповідає символу «@». |
(gmail) |
відповідає слову «gmail». |
\. |
відповідає символу «.» |
com |
відповідає слову «com» |
(\w|$) |
третя захоплююча група, де \w - відповідає будь-якому текстовому символу, | - Оператор «або», $ затверджує позицію наприкінці рядка. |
Оновлено: 03.07.2024
або