# Регулярные выражения

Регулярные выражения — это шаблоны, которые позволяют боту проверять формат ввода пользователя — например, чтобы убедиться, что введено именно имя пользователя, а не что-то другое.

<div data-with-frame="true"><figure><img src="/files/c161c1a6f86c7a78af671b405cbd0bb1a7d9f3d6" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
Чтобы выполнить сравнение с использованием регулярного выражения, нужно установить тип совпадения в «RegEx match».
{% endhint %}

{% hint style="info" %}
Регулярные выражения следует писать прямо в триггере, а не в переменных, используемых для сопоставления!
{% endhint %}

При сборе данных пользователи часто вводят что-то не то, что от них требуется. Вот типичный сценарий проверки ввода номера телефона. Если пользователь не введёт действительный номер телефона, бот предложит попробовать ещё раз.

<div data-with-frame="true"><figure><img src="/files/eb87bf78dbf3b0ccdfc6ea63e9604d6f07ffbac4" alt="" width="563"><figcaption></figcaption></figure></div>

Блок ввода номера телефона имеет два исходящих соединения: одно без какого-либо триггера, и другое с триггером, который использует регулярное выражение для сопоставления номера телефона.

^(\\+)?((\d{2,3}) ?\d|\d)((\[ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$

Этот сценарий использует два соединения для обработки проверки номера телефона:

1. **Основное соединение (действительный номер)**
   * **Триггер:** Номер телефона, введённый в правильном формате.
   * **Действие:** Добавляет номер в приложение и продолжает выполнение.
2. **Резервное соединение (недопустимый ввод)**
   * **Приоритет:** Ниже, чем у основного соединения.
   * **Триггер:** Любой ввод, который не является действительным номером телефона.
   * **Действие:** Сообщает пользователю об ошибке и перенаправляет его на повторную попытку.

Это гарантирует, что пользователь продолжит только после ввода корректных данных, а также сразу получит обратную связь по любым ошибкам.

## Список полезных регулярных выражений:

* **Числовой ввод только цифры, начинающиеся с 1:**\
  ^\[1-9]+\[0-9]\*$
* **Числовой ввод только цифры, начинающиеся с 0:**\
  ^\[0-9]+\[0-9]\*$
* **Номер кредитной карты:**\
  \[0-9]{13,16}
* **Общий номер телефона:**\
  ^(\\+)?((\d{2,3}) ?\d|\d)((\[ -]?\d)|( ?(\d{2,3}) ?)){5,12}\d$
* **Буквы и цифры** (латиница):\
  ^\[a-zA-Z0-9]+$
* **домен** (например, abcd.com):\
  ^(\[a-zA-Z0-9]\(\[a-zA-Z0-9\\-]{0,61}\[a-zA-Z0-9])?\\.)+\[a-zA-Z]{2,6}$
* **URL** (например, abcd.com):\
  (https?):((//)|(\\\\\\\\))+\[\w\d:#@%/;$()\~\_?\\+-=\\\\\\.&]\*
* **IPv4:**\
  ((25\[0-5]|2\[0-4]\d|\[01]?\d\d?)\\.){3}(25\[0-5]|2\[0-4]\d|\[01]?\d\d?)
* **IPv6:**\
  ((^|:)(\[0-9a-fA-F]{0,4})){1,8}$
* **Имя пользователя** (с ограничением 2–20 символов, которыми могут быть буквы и цифры, первый символ должен быть буквой):\
  ^\[a-zA-Z]\[a-zA-Z0-9-\_\\.]{1,20}$
* **Пароль** (строчные и прописные латинские буквы, цифры):\
  ^(?=.\*\d)(?=.\*\[a-z])(?=.\*\[A-Z])(?!.\*\s).\*$
* **Надёжный пароль** (прописные, строчные буквы, цифры/специальные символы, минимум 8 символов):\
  (?=^.{8,}$)((?=.\*\d)|(?=.\*\W+))(?!\[.\n])(?=.\*\[A-Z])(?=.\*\[a-z]).\*$
* **Дата в формате ГГГГ-ММ-ДД:**\
  \[0-9]{4}-(0\[1-9]|1\[012])-(0\[1-9]|1\[0-9]|2\[0-9]|3\[01])\
  **ОБН.** Более строгая проверка даты:\
  (19|20)\d\d-((0\[1-9]|1\[012])-(0\[1-9]|\[12]\d)|(0\[13-9]|1\[012])-30|(0\[13578]|1\[02])-31)
* **Дата в формате ДД/ММ/ГГГГ:**\
  (0\[1-9]|\[12]\[0-9]|3\[01])\[- /.]\(0\[1-9]|1\[012])\[- /.]\(19|20)\d\d
* **Дата в формате ДД.ММ.ГГГГ:**\
  (0\[1-9]|\[12]\[0-9]|3\[01])\[.]\(0\[1-9]|1\[012])\[.]\(19|20)\d\d
* Ц**елые и числа с плавающей точкой** (точка в качестве десятичного разделителя)\
  \\-?\d+(\\.\d{0,})?
* **UUID**:\
  ^\[0-9A-Fa-f]{8}\\-\[0-9A-Fa-f]{4}\\-\[0-9A-Fa-f]{4}\\-\[0-9A-Fa-f]{4}\\-\[0-9A-Fa-f]{12}$
* **Широта или долгота:**\
  -?\d{1,3}\\.\d+
* **ОБН. E-mail**:\
  ^\[-\w.]+@(\[A-z0-9]\[-A-z0-9]+\\.)+\[A-z]{2,4}$
* <mark style="color:красный;">**ОБН. URL**</mark> \
  \~^(?:(?:https?|ftp|telnet)://(?:\[a-z0-9\_-]{1,32}(?::\[a-z0-9\_-]{1,32})?@)?)?(?:(?:\[a-z0-9-]{1,128}\\.)+(?:ru|su|com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|\[a-z]{2})|(?!0)(?:(?!0\[^.]|255)\[0-9]{1,3}\\.){3}(?!0|255)\[0-9]{1,3})(?:/\[a-z0-9.,\_@%&?+=\\\~/-]\*)?(?:#\[^ '\\"&]\*)?$\~i
* **ОБН. Время в формате ЧЧ:ММ:СС**: формат\
  ^(\[0-1]\d|2\[0-3])(:\[0-5]\d){2}$
* **ОБН. MAC-адрес**:\
  (\[0-9a-fA-F]{2}(\[:-]|$)){6}$|(\[0-9a-fA-F]{4}(\[.]|$)){3}

Существует большое количество доступных регулярных выражений. Если вы не нашли нужное в этом списке, стоит воспользоваться поисковой системой.

Вы можете удобно тестировать регулярные выражения на таких сайтах, как: <https://regex101.com/>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/ru/chatbot/functions/regex.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
