В статье разберём синтаксис и правила написания выражения или формулы для изменения Переменной.
Подробнее о работе Переменных: Обзор раздела Переменные.
После обновления 31.12.2024 стали доступны Формулы в тексте — благодаря им необязательно добавлять отдельные переменные или создавать действие, достаточно указать в тексте, пример:
{{=100-45=}}. Формулы в тексте также поддерживают работу с переменными.
Общие правила
- Количество пробелов вне кавычек
“ ”не имеет значения. - На месте любого числа или текста из примеров ниже могут быть Переменные.
- Для взаимодействия двух и более значений между собой обязательно должен присутствовать оператор.
- Порядок выполнения операций:
- Сначала выполняются вычисления во всех скобках, начиная с самой глубокой вложенности (пример: (2 + 2) * 2 = 8).
- Слева направо выполняется всё, что осталось после вычислений внутри скобок.
- Умножение и деление имеют приоритет над сложением и вычитанием (пример: 2 + 2 * 2 = 6).
- В самих скобках вычисление происходит слева направо.
Важно! Изменение Переменной происходит после вызова команды — если у вас в команде добавлено Действие изменить переменную
{{VARIABLE}}, а в текстовом блоке этой же команды настроена отправка переменной{{VARIABLE}}, то пользователю будет отправлено предыдущее значение.
Операции с текстом (конкатенация)
Простые операции

Для использования текста в выражении или формуле необходимо ставить кавычки “ ”.

Операции с текстом подразумевают использование двух и более фраз или переменных содержащих текст — в таких операциях может быть использован только оператор сложения +.
- Замена на одно значение —
“Hello”= Hello - Конкатенации строки с числом —
"Hello" + 50= Hello50 - Конкатенация двух строк —
"Hello" + ", World"= Hello, World
Сложные операции
В конкатенации могут быть использованы операции с числами, примеры:
"Текст" + 1 + 2= Текст12"Текст" + (1 + 2)= Текст31 + 2 + "Текст"= 3Текст(1 + 2) + "Текст"= 3Текст
Пояснение: пример 1 от примера 3 отличается последовательностью операций. Все математические операции выполняются слева направо. В примере 1 первой операцией является сложение Текста с Числом, из-за чего дальнейший результат просчитывается как Текст. В 3 примере первой операцией является сложение Числа с Числом, из-за чего он считается по правилам математики, после чего к ним прибавляется Текст.
Более наглядный пример: 1 + 2 + “Текст” + 1 + 2 = 3Текст12, в нём сначала выполняется сложение Числа с Числом по правилам математики, а после сложение с Текстом остальные операции просчитываются тоже как Текст.
Операции с числами
Простые операции
- Сложение —
1 + 2 - Вычитание —
3 - 4 - Умножение —
5 * 6 - Деление —
7 / 8 - Возведение в степень —
9 ^ 10
Сложные операции
- Синус (параметр в радианах) —
sin(3.14159) - Косинус (параметр в радианах) —
cos(3.14159) - Тангенс (параметр в радианах) —
tan(3.14159) - Котангенс (параметр в радианах) —
cot(3.14159) - Экспонента —
exp(2) - Логарифм по основанию константы e —
log(2)илиln(2) - Логарифм по основанию 10 —
log10(100)илиlg(100) - Модуль —
abs(-55) - Сигнум —
sgn(50) - Квадратный корень —
sqrt(144) - Округление в большую сторону —
ceil(55.5) - Округление в ближайшую сторону до 2 знаков после точки —
round(12.111, 2) - Округление в меньшую сторону —
floor(55.5) - Случайное число от 5 до 10 —
random(5, 10) - Максимальное значение из набора —
max(0, 1, 2, 3, 2, -2, -3, 1) - Минимальное значение из набора —
min(0, 1, 2, 3, 2, -7, -2, -3)
Формат вывода числа
number_format(123456) = 123,456
Принимаемые аргументы:
- число для изменения
- количество знаков после запятой
- разделитель дробной части
- разделитель тысяч
Примеры:number_format(123456) = 123,456number_format(123456, 0, ".", " ") = 123 456number_format(123456, 0, ".", ",") = 123,456number_format(123456, 3, ".", ",") = 123,456.000
Операции со строками
- Парсинг строки регулярным выражением —
match("prefix_DATA123", "/prefix_(.*)/")= DATA123 - Парсинг строки с выводом определённой группы поиска —
match_all("ABC", "/([A-Z]{1})/", 0)= Amatch_all("ABC", "/([A-Z]{1})/", 1)= Bmatch_all("ABC", "/([A-Z]{1})/", 2)= C
Важно! Нумерация групп начинается с 0, а не с 1!
- Замена подстроки в тексте —
replace("Привет, world", "world", "мир")= Привет, мир - Замена подстроки в тексте регулярным выражением —
reg_replace("Привет, world", "/([a-z]+)/", "мир")= Привет, мир
Синтаксис и поведение регулярных выражение соответствуют стандартам, принятым в языке программирования PHP.
В формулах с регулярными выражениями можно использовать флаги (модификаторы шаблона), доступные в PHP.Пример:
Переменная {{var}} содержит многострочный текст
"Line1
Line2
Line3"match_all({{var}}, "/([a-zA-Z0-9]+)/m", 0)= Line1match_all({{var}}, "/([a-zA-Z0-9]+)/m", 1)= Line2match_all({{var}}, "/([a-zA-Z0-9]+)/m", 2)= Line3
- Плюрализация - выбор правильной формы слова в зависимости от числа
plur(количество, единственное, множественное для 2-4, множественное для 5 и более)plur(0, "бот","бота","ботов")— 0 ботовplur(101, "бот", "бота", "ботов")— 101 ботplur(32, "бот", "бота", "ботов")— 32 бота
Для случаев, если множеств меньше трёх, например для английского языка:
plur(0, "bot", "bots")— 0 botsplur(1, "bot", "bots")— 1 botplur(2, "bot", "bots")— 2 botsplur(10, "bot", "bots")— 10 botsplur(11, "bot", "bots")— 11 botsplur(101, "bot", "bots")— 101 bots
Операции с датой и временем
- Прибавить к дате N дней —
ADD_DAYS("03.09.2023 15:34:12", 4) - Прибавить к дате N месяцев —
ADD_MONTHS("03.09.2023 15:34:12", 4) - Прибавить к дате N лет —
ADD_YEARS("03.09.2023 15:34:12", 4) - Прибавить к дате N часов —
ADD_HOURS("15:34:12", 4)илиADD_HOURS("03.09.2023 15:34:12", 2) - Прибавить к дате N минут —
ADD_MINUTES("03.09.2023 15:34:12", 4) - Прибавить к дате N секунд —
ADD_SECONDS("03.09.2023 15:34:12", 4) - Разница в днях между двумя датами —
DAYS_BETWEEN("15.09.2023 15:34:12", "11.09.2023 15:34:12") - Разница в часах между двумя датами —
HOURS_BETWEEN("30.08.2023 23:00", "29.08.2023 22:00") - Отформатировать дату в нужный формат —
DATE_FORMAT("15.09.2023 15:34:12", "d F Y")
Для вычитания необходимо передавать отрицательное значение дней/месяцев/лет и т. д. Пример: ADD_HOURS("03.09.2023 15:34:12", -2) = 03.09.2023 13:34:12.
Формат даты может быть любым из общепринятых (01.12.2023 | 01/12/2023 | 2023-12-01), но при этом год всегда состоит из 4 цифр.
На выходе ADD_* функций будет тот формат, что был на входе
Операторы сравнения
- для чисел —
==, !=, >=, <=
Пример: 1 == 1 --> 1; 1 != 1 --> 0 - для строк —
==, !=
Пример: "aa" == "bb" --> 0; "aa" != "bb" --> 1
Операторы сравнения для чисел можно использовать совместно с вычислениями. Например:
1 + 2 == 3 --> 1;
1 + 2 == 4 --> 0;
5 + 2 == 8 - 1 --> 1
Функция ЕСЛИ и логические операторы И/ИЛИ
if(условие, истина, ложь) — если условие выполнено, то в значение будет возвращён второй операнд (истина), иначе будет возвращён третий операнд (ложь)
if(0, "yes", "no")--> noif(1, "yes", "no")--> yes
Логические операторы ИЛИ и И в связке с функцией ЕСЛИ:
if(10 > 5 , "yes", "no")--> yesif(10 > 20 , "yes", "no")--> noif(10 > 20 && 2 < 3 , "yes", "no")--> noif(10 > 20 && 4 < 3 , "yes", "no")--> noif(20 > 10 && 4 < 3 , "yes", "no")--> noif(20 > 10 && 3 < 4 , "yes", "no")--> yesif(10 > 20 || 2 < 3 , "yes", "no")--> yesif(10 > 20 || 4 < 3 , "yes", "no")--> noif(20 > 10 || 4 < 3 , "yes", "no")--> yesif(20 > 10 || 3 < 4 , "yes", "no")--> yes
В функциях можно использовать переменные. Например:
if({{VAR1}} > {{VAR2}} , {{VAR3}}, {{VAR4}})— если значение VAR1 больше значения VAR2, то в результате будет значение VAR3, иначе значение VAR4
Важно! В операциях слева и справа от операторов сравнения и арифметических операторов должны стоять пробелы.
Если запятая может быть воспринята как значение, то её необходимо отделить пробелом.
Например:
if(12<10,"yes","no")— неправильно, так как валидатор примет не "10", а "10,"if(12<10 , "yes", "no")— правильно.
Другое
hmac_sha1— подпись сообщения по алгоритму sha1 (первый аргумент = сообщение, второй аргумент = секретный ключ)
hmac_sha1("message","secret") = 0caf649feee4953d87bf903ac1176c45e028df16
hmac_sha256— подпись сообщения по алгоритму sha256 (первый аргумент = сообщение, второй аргумент = секретный ключ)
hmac_sha256("message", "secret") = 8b5f48702995c1598c573db1e21866a9b825d4a794d169d7060a03605796360b
hmac_sha384— подпись сообщения по алгоритму sha384 (первый аргумент = сообщение, второй аргумент = секретный ключ)
hmac_sha384("message", "secret") = ad0ef4e80da427b2a33d4457c972bf759f50766fbb665690d50b7cb38dd5217db559c93ea7cbee48e2ae1a5b4aafd34b
hmac_sha512— подпись сообщения по алгоритму sha512 (первый аргумент = сообщение, второй аргумент = секретный ключ)
hmac_sha512("message", "secret") = 1bba587c730eedba31f53abb0b6ca589e09de4e894ee455e6140807399759adaafa069eec7c01647bb173dcb17f55d22af49a18071b748c5c2edd7f7a829c632
hmac_md5— подпись сообщения по алгоритму md5 (первый аргумент = сообщение, второй аргумент = секретный ключ)
hmac_md5("message", "secret") = 7e0d0767775312154ba16fd3af9771a2
hmac_ripemd160— подпись сообщения по алгоритму ripemd160 (первый аргумент = сообщение, второй аргумент = секретный ключ)
hmac_ripemd160("message", "secret") = c66cf705f6c9dd35a0dfe512c7a9bd0bbcf533a2
md5— вычислить хэш md5
md5("test") = 098f6bcd4621d373cade4e832627b4f6
sha256— вычислить хэш sha256
sha256("test") = 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
crc32— вычислить хэш crc32
crc32("test") = 3632233996
base64_encode— закодировать base64 строку
base64_encode("test") = dGVzdA==
base64_decode— декодировать base64 строку
base64_decode("dGVzdA==") = test
bin2hex— преобразовать бинарный формат данных в HEX
bin2hex("aaa") = 616161
hex2bin— преобразовать HEX формат данных в бинарный
hex2bin("616161") = aaa
strlen— длина строки
strlen("test") = 4
json_extract— извлечение данных из JSON с использованием JSON Path
json_extract({{SHOP_ORDER_LAST_RECEIPT}}, "$.price_total") = итоговая стоимость последнего заказа в магазине
Изменение регистра
to_lower("ПРИВЕТ WORLD")— привет worldto_lower("Hello World")— hello worldto_lower("123ABC")— 123abcto_lower("")—
to_upper("привет world")— ПРИВЕТ WORLDto_upper("Hello World")— HELLO WORLDto_upper("123abc")— 123ABCto_upper("")—
capitalize("привет world")— Привет worldcapitalize("hello WORLD")— Hello WORLDcapitalize("123abc")— 123abccapitalize("")—
capitalize_each("привет world test")— Привет World Testcapitalize_each("hello WORLD test")— Hello WORLD Testcapitalize_each("one two three")— One Two Threecapitalize_each("")—
uncapitalize("Привет World")— привет Worlduncapitalize("HELLO WORLD")— hELLO WORLDuncapitalize("Test")— testuncapitalize("")—
Обрезка и усечение
trim(" hello world ")— hello worldtrim(" привет ")— приветtrim("\t\ntest\n\t")— testtrim(" ")—trim("")—
trim_left(" hello world ")— hello worldtrim_left("\t\nleft")— lefttrim_left(" test")— testtrim_left("")—
trim_right(" hello world ")— hello worldtrim_right("right\t\n")— righttrim_right("test ")— testtrim_right("")—
truncate("Длинный текст для тестирования", 10)— Длинный теtruncate("Short", 10)— Shorttruncate("Exact", 5)— Exacttruncate("", 5)—
truncate_start("Длинный текст для тестирования", 10)— кст для тестированияtruncate_start("Short text", 10)—truncate_start("Test", 4)—truncate_start("", 5)—
truncate_end("Длинный текст для тестирования", 10)— Длинный текст для теtruncate_end("Short text", 10)—truncate_end("Test", 4)—truncate_end("", 5)—
Очистка и фильтрация
squash_spaces(" hello world test ")— hello world testsquash_spaces("one\t\ttwo\n\nthree")— one two threesquash_spaces("normal text")— normal textsquash_spaces("")—
strip_digits("hello123world456")— helloworldstrip_digits("test 1 2 3 text")— test textstrip_digits("123456")—strip_digits("no digits here")— no digits here
strip_letters("hello123world456")— 123456strip_letters("test 1 2 3 text")— 1 2 3strip_letters("abcdef")—strip_letters("123456")— 123456
strip_specials("hello!@#world$%^")— helloworldstrip_specials("test()*+,-./:;<=>?")— teststrip_specials("normal text 123")— normaltext123strip_specials("!@#$%^&*()")—
Проверка содержимого
starts_with("hello world", "hello")— 1starts_with("hello world", "world")— 0starts_with("тест", "те")— 1starts_with("", "test")— 0starts_with("test", "")— 0
ends_with("hello world", "world")— 1ends_with("hello world", "hello")— 0ends_with("тест", "ст")— 1ends_with("", "test")— 0ends_with("test", "")— 0
contains("hello world test", "world")— 1contains("hello world test", "xyz")— 0contains("привет мир", "мир")— 1contains("", "test")— 0contains("test", "")— 0
word_count("hello world test")— 3word_count("один два три четыре")— 4word_count("single")— 1word_count("")— 0word_count(" multiple spaces here ")— 3
Удаление эмодзи
strip_emojis("Hello 😀 World 🌍")— Hello Worldstrip_emojis("Test 👍 🎉 emoji")— Test emojistrip_emojis("No emojis here")— No emojis herestrip_emojis("🚀🎯⭐️")— ⭐️
Валидация
is_email("test@example.com")— 1is_email("invalid.email")— 0is_email("user@domain.ru")— 1is_email("")— 0is_email("test@")— 0
is_url("https://example.com")— 1is_url("http://test.ru")— 1is_url("ftp://files.com")— 1is_url("not_a_url")— 0is_url("")— 0
is_ip("192.168.1.1")— 1is_ip("2001:db8::1")— 1is_ip("invalid.ip")— 0is_ip("256.256.256.256")— 0is_ip("")— 0
is_ipv4("192.168.1.1")— 1is_ipv4("10.0.0.1")— 1is_ipv4("2001:db8::1")— 0is_ipv4("invalid")— 0is_ipv4("")— 0
is_ipv6("2001:db8::1")— 1is_ipv6("::1")— 1is_ipv6("192.168.1.1")— 0is_ipv6("invalid")— 0is_ipv6("")— 0
is_mac("00:1B:44:11:3A:B7")— 1is_mac("00-1B-44-11-3A-B7")— 1is_mac("001B44113AB7")— 0is_mac("invalid_mac")— 0is_mac("")— 0
is_phone("+7 (999) 123-45-67")— 1is_phone("89991234567")— 1is_phone("+1-555-123-4567")— 1is_phone("invalid_phone")— 0is_phone("")— 0
is_number("123")— 1is_number("123.45")— 1is_number("-67.89")— 1is_number("not_a_number")— 0is_number("")— 0is_string("hello world")— 1is_string("123")— 1is_string("")— 1is_string("true")— 1
Маскировка
mask_email("test@example.com")— t***@example.commask_email("user@domain.ru")— u***@domain.rumask_email("a@b.c")— *@b.cmask_email("invalid_email")— invalid_email
mask_credit_card("1234567890123456")— **** **** **** 3456mask_credit_card("4111-1111-1111-1111")— **** **** **** 1111mask_credit_card("4111 1111 1111 1111")— **** **** **** 1111mask_credit_card("invalid_card")— invalid_card
mask_name("Иван Петров")— И*** П*****mask_name("John Smith")— J*** S****mask_name("А")— Аmask_name("")—
Извлечение
extract_number("Цена: 1234.56 рублей")— 1234.56extract_number("В тексте нет чисел")—extract_number("123 и 456 и 789")— 123extract_number("")—extract_phone("Мой телефон: +7 (999) 123-45-67")— +7 (999) 123-45-67extract_phone("Call me 89991234567")— 89991234567extract_phone("Нет телефона в тексте")—extract_phone("")—
extract_email("Напишите на test@example.com")— test@example.comextract_email("Email: user@domain.ru или admin@site.com")— user@domain.ruextract_email("Нет email в тексте")—extract_email("")—
extract_username("Подпишись на @username")— @usernameextract_username("Пользователи: @user1")— @user1extract_username("Нет username в тексте")—extract_username("")—
extract_hashtag("Пост с #тегом")— #тегомextract_hashtag("Нет хештегов")—extract_hashtag("")—
-
extract_url("Сайт: https://example.com")— https://example.comextract_url("Нет ссылок в тексте")—extract_url("")—
Замена
switch("apple", "apple", "это яблоко", "banana", "это банан", "неизвестный фрукт")— это яблокоswitch("banana", "apple", "это яблоко", "banana", "это банан", "неизвестный фрукт")— это бананswitch("orange", "apple", "это яблоко", "banana", "это банан", "неизвестный фрукт")— неизвестный фрукт
Для понимания разложим функцию вертикально:
switch("{{VARIABLE}}",—switchназвание функции, а{{VARIABLE}}это переменная с каким-то значением, которое будет сравниваться с прописанными ниже условиями."apple", "это яблоко",— если значение переменной равноapple, то формула подставит текстэто яблоко."banana", "это банан",— если значение переменной равноbanana, то формула подставит текстэто банан."неизвестный фрукт")— если значение переменной не подходит ни под одно из условий, то формула подставит текстнеизвестный фрукт.
Экранирование
Используйте символ \ для экранирования символов участвующих в синтаксисе выражения. Конструкция \" позволяет использовать верхние кавычки в результате выражения, примеры:
\"" + {{FIRST_NAME_TEXT}} + "\"" = “Имя”
\\ + {{USERNAME_TEXT}} + \\ = \@username\
Другие конструкции:
- Табуляция
\t— добавляет 4 пробела слева - Перенос строки
\n— добавляет перенос строки