# Строковые функции

Кроме `{var:}` есть еще несколько функций, которые вы также можете использовать. Строковыми они называются потому что работают прямо внутри строк текстовых полей.&#x20;

Функции отличаются наличием дополнительных аргументов, которые выступают исходными данными. Функции не просто подставляют переменную а выполняют полезную операцию.&#x20;

{% hint style="info" %}
Все функции поддерживают многоуровневую вложенность друг в друга
{% endhint %}

## Случайное число - rand&#x20;

Cлучайное число в указанном диапазоне

```
{rand:|100|999}
```

Первое число - начиная с числа, второе - заканчивая. Числа учитываются включительно.&#x20;

> Примечание: рандом криптографический и не учитывает историю запросов, поэтому на малых диапазонах множественные повторы одинаковых результатов являются нормой

## Случайный текст - incident

```
{incident:|one|two|three|four}
```

Список значений разделяется вертикальной чертой `|` . И начинается с такой же вертикальной черты.&#x20;

Дополнительно функция поддерживает возможность передачи массива в первый аргумент. Например у вас есть переменная `{var:array}` у которой значение  - JSON массив: `["one","two,"three"]` . Работать будет аналогично. Пример:&#x20;

```
{incident:{var:array}}
```

* &#x20;`incident` - случайный текст выбранный из всех предложенных вариантов
  * Пример:&#x20;
  * Пример результата: `two`

## Оставить только цифры - num

* `num` - оставить только цифры / числа / математику
  * `int` - только цифры в виде одного числа - по умолчанию
  * `float` - число с точкой
  * `math` - числа (float) и математические операторы
  * `list` - числа и запятые
  * `human` - удобочитаемый формат
  * `price` - удобочитаемый формат цены (сумма с копейками, если такие переданы)
  * Пример: `{num:{var:product.price}|human}`
* `{num:{var:product.price}|human}`

## Калькулятор - calc

Посчитать простую математическую формулу (строковый аналог действия Калькулятор)

* `calc` - посчитать простую математическую формулу (аналог действия Калькулятор)
  * Параметры:
    * 1 - Переменная откуда брать формулу
    * 2 - Математическое выражение. Может содержать вложенные переменные. Если указаны и первый и второй параметры, то второй параметр в приоритете
    * 3 - Количество знаков после запятой
  * Примеры:
    * а) `{calc:1.234 + 2*3}` = 7.234\
      б) `{calc:1.234 + 2*3|1}` = 7.2
    * а) `{var:expression}` = 1.234 + 2\*3\
      б) `{calc:{var:expression}}|1}` = 7.2

## Вывод аргумента по индексу - case

* `case` - получение аргумента по его индексу, который находится в значении переменной
  * Пример: `{case:{var:users.user.appeal}|обращение на вы|женский|мужской}`
  * Суть функции:
    * Варианты значений воспринимаются как массив с числовыми индексами.
    * Нумерация элементов массива начинается с 0.
    * Значение переменной переводится в число и воспринимается как индекс этого массива.
    * И в итоге происходит поиск элемента по индексу,
      * или выводится значение переменной, если такой элемент с таким номером не найден.
    * например, `{var:users.user.appeal}` может принимать такие значения:
      * `0` - пол не указан, `1` - женский, `2` - мужской.
      * Поэтому и пример выше сработает как положено.

## Cклонение слов после числительных - lexeme

* `lexeme` - склонение существительных после числительных
  * Пример: `в корзине было {var:apples} {lexeme:{var:apples}|яблок|яблоко|яблока}`
  * Пример результата: `в корзине было 24 яблока`
  * Суть: 0 или много → яблок, 1 → яблоко, 2 / 3 / 4 → яблока

## Задать формат даты - date&#x20;

Задает или меняет формат даты и времени. Позволяет получить текущее время.&#x20;

Аргументы:&#x20;

1. Переменная (сразу после двоеточия) с временем
   * Если оставить пустой, то будет подставлено текущее время
   * Должна быть в формате UNIX Timestamp: `%s` или `%d-%m-%Y %H:%M:%S`. Если эти форматы вам не подходят, то обязательно передайте свой третьим аргументом!
2. Формат исходящей даты. Пара примеров:&#x20;
   * `%F %T` - *2023-01-31 18:57:45*&#x20;
   * `%d-%m-%Y %H:%M` - *31-01-2023 18:57*
   * `%s` - *1675180665* - количество секунд с 1 января 1970 года&#x20;
3. Формат входящей даты (значения переменной или текущей)
   * Форматы аналогичны входящим за исключением `%s`. Он не поддерживается, но его и не нужно задавать через формат. Достаточно просто подставить переменную со значением в формате UNIX Timestamp&#x20;

Примеры:&#x20;

* `{date:|%d-%m-%Y %H:%M}`
* `{date:{var:object.text}|%F %T|%d-%m-%Y %H:%M}`
* `{date:{var:date} {var:time}|%s|%d/%m/%Y %H:%M}`
* `{date:|%s}`
* `{date:|%s.%f}` или `{date:|%s-%f}`

### Таблица форматов даты

| Директива | Описание                                                | Пример результата |
| --------- | ------------------------------------------------------- | ----------------- |
| %a        | Weekday, short version                                  | Wed               |
| %w        | Weekday as a number 0-6, 0 is Sunday                    | 3                 |
| %d        | Day of month 01-31                                      | 31                |
| %b        | Month name, short version                               | Dec               |
| %B        | Month name, full version                                | December          |
| %m        | Month as a number 01-12                                 | 12                |
| %y        | Year, short version, without century                    | 18                |
| %Y        | Year, full version                                      | 2018              |
| %H        | Hour 00-23                                              | 17                |
| %I        | Hour 00-12                                              | 05                |
| %p        | AM/PM                                                   | PM                |
| %M        | Minute 00-59                                            | 41                |
| %S        | Second 00-59                                            | 08                |
| %f        | Microsecond 000000-999999                               | 548513            |
| %s        | UNIX Timestamp - количество секунд с 1 января 1970 года | 1675180665        |
| %z        | UTC offset                                              | +0100             |
| %Z        | Timezone                                                | CST               |
| %j        | Day number of year 001-366                              | 365               |

| Директива | Описание                                                    | Пример результата        |
| --------- | ----------------------------------------------------------- | ------------------------ |
| %U        | Week number of year, Sunday as the first day of week, 00-53 | 52                       |
| %W        | Week number of year, Monday as the first day of week, 00-53 | 52                       |
| %c        | Local version of date and time                              | Mon Dec 31 17:41:00 2018 |
| %C        | Century                                                     | 20                       |
| %x        | Local version of date                                       | 12/31/18                 |
| %X        | Local version of time                                       | 17:41:00                 |
| %%        | A % character                                               | %                        |
| %G        | ISO 8601 year                                               | 2018                     |
| %u        | ISO 8601 weekday (1-7)                                      | 1                        |
| %V        | ISO 8601 weeknumber (01-53)                                 | 01                       |
