Выражения: операции и функции

Выражение — заданная создателем сценария последовательность арифметических или строковых действий над константами, переменными и функциями от них. Выражение подставляется как аргумент в свойство объекта; результатом может быть строка или число. Задаётся на вкладке «Выражения» окна аргумента.

Строка или число: как обработчик решает

Сначала вычисляются все арифметические комбинации, которые вообще поддаются расчёту. Чтобы фрагмент гарантированно считался строкой, заключите его в кавычки.

Разница, которая ловит всех
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…