Выражение — заданная создателем сценария последовательность арифметических или строковых действий над константами, переменными и функциями от них. Выражение подставляется как аргумент в свойство объекта; результатом может быть строка или число. Задаётся на вкладке «Выражения» окна аргумента.
Строка или число: как обработчик решает
Сначала вычисляются все арифметические комбинации, которые вообще поддаются расчёту. Чтобы фрагмент гарантированно считался строкой, заключите его в кавычки.
Разница, которая ловит всех
2 + 3 + [переменная_строка_1]
"2" + "3" + [переменная_строка_1]
В первом случае
2 + 3 сложатся как числа, и результат начнётся с символа
«5».
Во втором операнды — строки, они склеятся, и результат начнётся с
«23».
Примеры числовых выражений
[переменная_число_1] + 1
2 ^ [переменная_число_2] * ( Log10 ( [переменная_число_3] ) + 2 )
Sin ( Len ( [переменная_строка_1] ) )
Примеры строковых выражений
[переменная_строка_1] + [переменная_строка_2]
Кусок текста + [переменная_строка_1]
"Кусок текста" + [переменная_строка_1]
SubStr ( [переменная_строка], 1, Length ( [переменная_строка] ) - 1 )
If ( num([a]) > 5, 'больше', 'меньше')
Два общих правила
Типы параметров в таблицах ниже — это типы, в которые будет произведено преобразование. Передать можно переменную другого типа, если она удовлетворяет правилу включения типов.
Функции без параметров допустимо писать и с пустыми круглыми скобками, и без них.
Операции
| Операция | Параметры | Возвращает | Описание |
+ | s1 + s2, x1 + x2, s + x, x + s | строка / число | Если хотя бы один операнд — строка, результат строка, склеенная из двух частей. Если все операнды числа — результат число. |
- | x1 - x2 | число | Вычитает из X1 число X2. |
* | x1 * x2 | число | Перемножает X1 и X2. |
/ | x1 / x2 | число | Делит X1 на X2. |
^ | x1 ^ x2 | число | Возводит X1 в степень X2. |
% | x1 % x2 | число | Действительный остаток от деления. |
( ) | — | — | Приоритет арифметической операции. |
& | x1 & x2, s1 & s2, x & s, s & x | число / строка | Соединяет числа или строки в строковом представлении. Примеры: 2.16 & 3 → 2.163; "2" & 5 → "25"; 2 & -3 → "2-3". |
Upper (s) | строка | строка | Преобразует строку в верхний регистр. |
Lower (s) | строка | строка | Преобразует строку в нижний регистр. |
Математические функции
| Функция | Возвращает | Описание |
Abs (x) | число | Абсолютная величина числа X. |
Ceil (x) | число | Округление до целого в большую сторону. |
Floor (x) | число | Округление до целого в меньшую сторону. |
Round (x) | число | Ближайшее целое. |
Sin (x), Cos (x), Tan (x) | число | Синус, косинус, тангенс угла X в радианах. |
Exp (x) | число | Экспонента числа X. |
Ln (x) | число | Натуральный логарифм X. |
Lg (x), Log10 (x) | число | Десятичный логарифм X. |
Log (x, y) | число | Логарифм Y по основанию X. С одним параметром возвращает его натуральный логарифм. |
Max (x, y), Min (x, y) | число | Максимум и минимум из двух чисел. |
Sqr (x) | число | Квадрат числа X. |
Sqrt (x) | число | Квадратный корень числа X. |
Random (x) | число | Случайное целое из отрезка [0, x−1]. |
Строковые функции
Отсчёт позиций — с нуля
В IndexOf, Remove и Substr первый символ строки имеет номер 0, а не 1.
| Функция | Возвращает | Описание |
Len (s) | число | Длина строки S в символах. |
IndexOf (s1, s2) | число | Ищет подстроку S2 в строке S1 и возвращает номер позиции. Если не найдена — −1. |
Substr (s, idx, len) | строка | Подстрока длиной LEN, вырезанная из S начиная с позиции IDX. |
Remove (s, idx, len) | строка | Строка S без LEN символов, начиная с позиции IDX. |
Replace (s, s1, s2) | строка | Замена в строке S всех вхождений подстроки S1 на S2. |
RegexReplace (s, s1, s2) | строка | То же, но S1 — регулярное выражение. Пример: RegexReplace('Имеет место быть', '[\S]+', 'Заменило'). |
Trim (s) | строка | Убирает начальные и конечные пробельные символы. |
TrimStart (s), TrimEnd (s) | строка | Убирает пробельные символы только в начале либо только в конце. |
NewId () | строка | Строковое представление свежесгенерированного GUID, например 12A5A37E-B97A-45F7-86F1-87C88DA66CBA. |
Дата и время
Функциям, ожидающим дату/время, можно передать как значение типа «дата/время», так и строку в установленном формате. Стандартный формат представления даты в строке — dd.MM.yyyy HH:mm:ss, либо любой другой, установленный в системе или указанный в конфигурационном файле серверного приложения.
| Функция | Возвращает | Описание |
Date (d) | дата/время | Дата, сформированная по параметру; время обнуляется — начало дня. |
DateTime (Y[, M[, D[, H[, m[, s[, ms]]]]]]) | дата/время | Дата и время из переданных чисел: год, месяц, день, час, минута, секунда, миллисекунда. Часть параметров может быть опущена. |
DateTime (s) | дата/время | Принудительное преобразование строки к типу «дата/время». |
DateFormat (s, d) | строка | Преобразует дату в строку по указанному стандартному формату s. |
DateDiff (s, d1, d2) | число | Интервал между двумя датами в единицах, заданных параметром s (см. ниже). |
Year (d), Month (d), Day (d) | число | Год, месяц, день. |
Hour (d), Minute (d), Second (d), Millisecond (d) | число | Час, минута, секунда, миллисекунда. |
DayOfWeek (d) | число | День недели (1—7). |
DayOfYear (d) | число | Порядковый номер дня в году. |
NowTick () | число | Текущий тик системы — количество миллисекунд с момента запуска операционной системы. |
Единицы интервала для DateDiff
| Единица | Обозначение |
| Год | yy, yyyy |
| Квартал | qq, q |
| Месяц | mm, m |
| День в году | dy, y |
| День | dd, d |
| Неделя | wk, ww |
| Час | hh |
| Минута | mi, n |
| Секунда | ss, s |
| Миллисекунда | ms |
Преобразования и условие
| Функция | Возвращает | Описание |
If (x, a, b) | число / строка | Если x не ноль (истина) — возвращает a, иначе b. В логическом выражении допустимы ==, >, <, >=, <=, &&, ||. |
Num (s) | число | Принудительное преобразование строки к числу. Если строка не является корректным числом — возвращает 0. |
Numval (s) | число | То же, но при некорректной строке берёт максимальное количество начальных символов, образующих корректное число. |
Str (x) | строка | Принудительное преобразование числа к строке. |
Eval (s) | число / строка | Вычисляет выражение, содержащееся в строке-параметре. Позволяет задавать выражения динамически, вне сценария. |
Char (x) | строка | ANSI-символ с кодом X (0—255). |
MD5 (s) | строка | MD5-код строки S. |
Translit (s) | строка | Транслитерация строки в латинские символы. |
DecHex (x) | строка | HEX-представление числа. |
HexDec (s) | число | Преобразует строку к числу, рассматривая её как HEX-представление. |
HexStr (s) | строка | Преобразует строку, рассматривая её как HEX-представление. |
StrHex (s) | строка | HEX-преобразование строки S. |
GuidToInt (s) | число | Формирует довольно уникальное целое число на основе строки с GUID-идентификатором. |
Base64Encode (s), Base64Decode (s) | строка | Кодирование и декодирование base64 в текущей кодировке ANSI. |
Base64EncodeUtf8 (s), Base64DecodeUtf8 (s) | строка | То же в кодировке UTF-8. |
UrlEncode (s), UrlDecode (s) | строка | Кодирование и декодирование UrlEncode в текущей кодировке ANSI. |
UrlEncodeUtf8 (s), UrlDecodeUtf8 (s) | строка | То же в кодировке UTF-8. |
Как ведёт себя Eval
Eval ( "1 + 3" ) → 4
Eval ( "Привет" ) → ошибка
Eval ( " 'Привет' " ) → "Привет"
Eval ( [стр.переменная_1] ) → результат выражения, заданного в переменной
Eval ( " [стр.переменная_1] " ) → содержимое переменной
Примеры с If
If ( num([a]) > 5, 'a больше 5', 'a меньше 5')
If ( num([a]) && num([b]), substr([callerid], 6, 5), 1)
Обращение к встроенным функциям сценария
| Функция | Возвращает | Описание |
ScriptFunc (s) | строка / число | Возвращает значение встроенной функции сценария, названной в параметре. Указывать нужно полное название: ScriptFunc('Текущий час'), ScriptFunc('Номер линии'). |
Полный перечень встроенных функций — в статье «Встроенные функции сценария».
Спецсимволы и константы
| Спецсимвол | Возвращает |
EndLine, EndLine () | Символ конца строки |
Tab, Tab () | Символ табуляции |
Quot, Quot () | Символ одинарной кавычки |
DblQuot, DblQuot () | Символ двойной кавычки |
| Константа | Значение |
Pi | Число «Пи», 3,1415926… |
Fi | Число «Фи», 1,6180339… |
E | Число «Е», 2,7182818… |