На этой странице собраны разные примеры формул, которые можно просто скопировать и начать использовать, без необходимости в них разбираться.
Обрезание текста по длине
javascriptlet({ text: 'Это текст, который обрезается по длине', length: 20, }, if( length(text) > length, substr(text, 0, length) & '…', text ))
В формулу нужно подставить переменную с текстом, а так же заменить
20
на количество символов, после которого строка будет обрезаться.Форматирование дат
javascriptlet({ format: 'DAY.MONTH.YEAR HOUR:MINUTE', date: now(), }, let({ dateStr: toString(toDate(date)) }, reduce([ ['YEAR', substr(dateStr, 0, 4)], ['MONTH', substr(dateStr, 5, 2)], ['DAY', substr(dateStr, 8, 2)], ['HOUR', substr(dateStr, 11, 2)], ['MINUTE', substr(dateStr, 14, 2)], ['SECOND', substr(dateStr, 17, 2)], ], replace(value, item[0], item[1]), format)))
Если формулу не менять, то она будет выводить отформатированную текущую дату и время. Можно заменить
now()
переменной, дата в которой представлена в виде числа или строки.Склонение существительного после числа
javascriptlet({ count: 22, words: ['день', 'дня', 'дней'], }, count & ' ' & words[if( count % 100 > 4 and count % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(count % 10 > 5, 5, count % 10)] )])
В формуле нужно заменить
22
на ваше число, и заменить слова.Размер файла из байт в килобайты и т.д.
javascriptlet({ bytes: 332334, units: ['B', 'KB', 'MB', 'GB', 'TB', 'PB'], precision: 2, zero: 'Empty', }, if(bytes == 0, zero, let({ e: min([floor(log(bytes, 1024)), 5]) }, round(bytes / pow(1024, e), precision) & units[e])))
В формуле
bytes
- это размер файла в байтах, units
- используемые обозначения, а zero
это текст, используемый при 0 байт.Округление до тысяч, миллионов и т.д.
javascriptlet({ bytes: 435478876, units: [' тыс.', ' млн.', ' млрд.', ' трлн.'], precision: 0, zero: '0', }, if(bytes == 0, zero, let({ e: min([floor(log(bytes, 1000)), 4]) }, round(bytes / pow(1000, e), precision) & if (e > 0, units[e - 1], ''))))
Форматирование чисел
javascriptlet({ v:split(toString(var1),"."), q: if(v[1]?==null,"","."&if(toNumber(v[1])<=9,v[1]&"0",v[1])), e:let({ number: v[0], delimiter: ' ', }, let({ str: toString(number) }, trimStart(join(map(range(0, length(str)), if((length(str) - item) % 3 == 0, delimiter, '') & substr(str, item, 1) ))))) }, e&q)
Перемешивание списка в случайном порядке
javascriptlet({ array: [1, 2, 3, 4, 5] }, map( sort(map(array, [item, random()]), item[1]), item[0] ))
Генератор случайных паролей
Данная формула перебирает массив
array
в функции sort
, и возвращает массив в перемешанном виде в переменной pass
, а далее функция slice
собирает из этой переменной 9 символов для пароля. Количество символов можно регулировать изменяя число в slice
. javascriptlet({ array: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "V", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "v", "x", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "_", "$", "@", "%", "&", "~"], pass: map( sort(map(array, [item, random()]), item[1]), item[0] ) }, join(slice(pass, 0, 9 ), "") )
Замена цвета в формуле
Данная формула преобразует цвет из формата RGB в формат RGBA, добавляя Alfa канал
javascriptlet({ color: data.fields.statusColor, bgcolor: replace(color, ")", ", 0.12)"), }, bgcolor )
Добавляем картинку (аватарку) формулой
Берет аватарку. Если аватарки нет — картинка no-avatar
javascriptif( user.current.avatar == "", "https://cs6.pikabu.ru/avatars/1121/x1121129-2144512139.png", user.current.avatar)
Дата и время из поля с datapicker из формата ДД.ММ.ГГГГ ЧЧ:ММ в формат Unix Date
javascriptlet({ dueDate: data.fields.dueDate, dateSplit: split(dueDate, ' '), dateDay: join(reverse(split(dateSplit[0], ".")), "-"), dateTime: dateSplit[1], date: toNumber(toDate(dateDay & ' ' & dateTime)), }, date )
Генератор ЧПУ ссылок
Данная формула выполняет транслитерацию rus-to-lat
javascriptlet({ ru: "Съешь же ещё этих мягких французских булок, да выпей чаю", text: lower(ru), dict: { a: ["а","a"], b: ["б","b"], v: ["в","v"], g: ["г","g"], d: ["д","d"], e: ["е","e"], yo: ["ё","yo"], zh: ["ж","zh"], z: ["з","z"], i: ["и","i"], ik: ["й","i"], k: ["к","k"], l: ["л","l"], m: ["м","m"], n: ["н","n"], o: ["о","o"], p: ["п","p"], r: ["р","r"], s: ["с","s"], t: ["т","t"], u: ["у","u"], f: ["ф","f"], h: ["х","kh"], ts: ["ц","ts"], ch: ["ч","ch"], sh: ["ш","sh"], sha: ["щ","sha"], tz: ["ъ",""], bi: ["ы","i"], mz: ["ь",""], ee: ["э","e"], yu: ["ю","yu"], ya: ["я","ya"], space: [" ", "-"], sim: ["!",""], zpt: [",",""] }, rep0: replaceAll(text, dict.a[0], dict.a[1]), rep1: replaceAll(rep0, dict.b[0], dict.b[1]), rep2: replaceAll(rep1, dict.v[0], dict.v[1]), rep3: replaceAll(rep2, dict.g[0], dict.g[1]), rep4: replaceAll(rep3, dict.d[0], dict.d[1]), rep5: replaceAll(rep4, dict.e[0], dict.e[1]), rep6: replaceAll(rep5, dict.yo[0], dict.yo[1]), rep7: replaceAll(rep6, dict.zh[0], dict.zh[1]), rep8: replaceAll(rep7, dict.z[0], dict.z[1]), rep9: replaceAll(rep8, dict.i[0], dict.i[1]), rep10: replaceAll(rep9, dict.ik[0], dict.ik[1]), rep11: replaceAll(rep10, dict.k[0], dict.k[1]), rep12: replaceAll(rep11, dict.l[0], dict.l[1]), rep13: replaceAll(rep12, dict.m[0], dict.m[1]), rep14: replaceAll(rep13, dict.n[0], dict.n[1]), rep15: replaceAll(rep14, dict.o[0], dict.o[1]), rep16: replaceAll(rep15, dict.p[0], dict.p[1]), rep17: replaceAll(rep16, dict.r[0], dict.r[1]), rep18: replaceAll(rep17, dict.s[0], dict.s[1]), rep19: replaceAll(rep18, dict.t[0], dict.t[1]), rep20: replaceAll(rep19, dict.u[0], dict.u[1]), rep21: replaceAll(rep20, dict.f[0], dict.f[1]), rep22: replaceAll(rep21, dict.h[0], dict.h[1]), rep23: replaceAll(rep22, dict.ts[0], dict.ts[1]), rep24: replaceAll(rep23, dict.sh[0], dict.sh[1]), rep25: replaceAll(rep24, dict.sha[0], dict.sha[1]), rep26: replaceAll(rep25, dict.tz[0], dict.tz[1]), rep27: replaceAll(rep26, dict.bi[0], dict.bi[1]), rep28: replaceAll(rep27, dict.mz[0], dict.mz[1]), rep29: replaceAll(rep28, dict.ee[0], dict.ee[1]), rep30: replaceAll(rep29, dict.yu[0], dict.yu[1]), rep31: replaceAll(rep30, dict.ya[0], dict.ya[1]), rep32: replaceAll(rep31, dict.space[0], dict.space[1]), rep33: replaceAll(rep32, dict.ch[0], dict.ch[1]), rep34: replaceAll(rep33, dict.zpt[0], dict.zpt[1]), result: replaceAll(rep34, dict.sim[0], dict.sim[1]), }, result)
Текущий месяц словами
javascriptlet({ monthr: let({ format: 'MONTH', date: now(), }, let({ dateStr: toString(toDate(date)) }, reduce([ ['YEAR', substr(dateStr, 0, 4)], ['MONTH', substr(dateStr, 5, 2)], ['DAY', substr(dateStr, 8, 2)], ['HOUR', substr(dateStr, 11, 2)], ['MINUTE', substr(dateStr, 14, 2)], ['SECOND', substr(dateStr, 17, 2)], ], replace(value, item[0], item[1]), format )))}, if(monthr == "01", "января", if(monthr == "02", "февраля", if(monthr == "03", "марта", if(monthr == "04", "апреля", if(monthr == "05", "мая", if(monthr == "06", "июня", if(monthr == "07", "июля", if(monthr == "08", "августа", if(monthr == "09", "сентября", if(monthr == "10", "октября", if(monthr == "11", "ноября", "декабря"))))))))))))
Число прописными буквами
javascriptlet({ c : var2, q : if(length(toString(var2))<6 ,111111,toNumber(substr(var2,3))), w : if(length(toString(var2))<6 ,111111, toNumber(substr(var2,1))), e : if(length(toString(var2))<6 ,111111, toNumber(substr(var2,1,2))), st : if(length(toString(var2))<6 ,111111, toNumber(substr(var2,0,3))), h : ['сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'], t : ['', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'], o : ['один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять','десять'], p : ['одиннацать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'], z : ['десять','одиннацать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'], a : ["одна тысяча","две тысячи","три тысячи","четыре тысячи","пять тысяч","шесть тысяч","семь тысяч","восемь тысяч","девять тысяч","десять тысяч",], b : ["одиннадцать тысяч", "двенадцать тысяч", "тринадцать тысяч","четырнадцать тысяч","пятнадцать тысяч","шестнадцать тысяч","семнадцать тысяч","восемнадцать тысяч","девятнадцать тысяч"], d : "тысяч", }, if(c<=10,o[c-1], if(c<20,p[toNumber(split(toString(c/10),".")[1])-1], if(c<100,t[toNumber(split(toString(c/10),".")[0])-1]&if(exists(split(toString(c/10),".")[1]) == false,""," "&o[toNumber(split(toString(c/10),".")[1])-1]), if(c<1000,h[toNumber(split(toString(c/100),".")[0])-1]& if(toNumber(substr(c,1,1))==0, if(toNumber(substr(c,2,1))==0,""," "&o[toNumber(substr(c,2,1))-1]), if(toNumber(substr(c,1,1))==1," "&z[toNumber(substr(c,2,1))]," "&t[toNumber(substr(c,1,1))-1]&if(toNumber(substr(c,2,1))==0,""," "&o[toNumber(substr(c,2,1))-1])) ), if(c<10000,a[toNumber(substr(c,0,1))-1]& if(toNumber(substr(c,1,1))==0,""," "&h[toNumber(substr(c,1,1))-1])& if(toNumber(substr(c,2,1))==0, if(toNumber(substr(c,3,1))==0,""," "&o[toNumber(substr(c,3,1))-1]), if(toNumber(substr(c,2,1))==1," "&z[toNumber(substr(c,3,1))]," "&t[toNumber(substr(c,2,1))-1]&if(toNumber(substr(c,3,1))==0,""," "&o[toNumber(substr(c,3,1))-1])) ), if(c<20000,if(c==10000,a[9],b[toNumber(substr(c,1,1))-1]& if(toNumber(substr(c,2,1))==0,""," "&h[toNumber(substr(c,2,1))-1])& if(toNumber(substr(c,3,1))==0, if(toNumber(substr(c,4,1))==0,""," "&o[toNumber(substr(c,4,1))-1]), if(toNumber(substr(c,3,1))==1," "&z[toNumber(substr(c,4,1))]," "&t[toNumber(substr(c,3,1))-1]&if(toNumber(substr(c,4,1))==0,""," "&o[toNumber(substr(c,4,1))-1])) )), if(c<100000,t[toNumber(substr(c,0,1))-1]&if(toNumber(substr(c,1,1))==0," "&d," "&a[toNumber(substr(c,1,1))-1]) & if(toNumber(substr(c,2,1))==0,""," "&h[toNumber(substr(c,2,1))-1])& if(toNumber(substr(c,3,1))==0, if(toNumber(substr(c,4,1))==0,""," "&o[toNumber(substr(c,4,1))-1]), if(toNumber(substr(c,3,1))==1," "&z[toNumber(substr(c,4,1))]," "&t[toNumber(substr(c,3,1))-1]&if(toNumber(substr(c,4,1))==0,""," "&o[toNumber(substr(c,4,1))-1])) ), if(c<1000000,h[toNumber(substr(c,0,1))-1]& if(count(split(toString(st/100),"."))==1," "&d&" "& if(q<=10 ,if(q-1==-1,"",o[q-1]), if(q<20,p[toNumber(split(toString(q/10),".")[1])-1], if(q<100,t[toNumber(split(toString(q/10),".")[0])-1]&if(exists(split(toString(q/10),".")[1]) == false,""," "&o[toNumber(split(toString(q/10),".")[1])-1]), if(q<1000,h[toNumber(split(toString(q/100),".")[0])-1]& if(toNumber(substr(q,1,1))==0, if(toNumber(substr(q,2,1))==0,""," "&o[toNumber(substr(q,2,1))-1]), if(toNumber(substr(q,1,1))==1," "&z[toNumber(substr(q,2,1))]," "&t[toNumber(substr(q,1,1))-1]&if(toNumber(substr(q,2,1))==0,""," "&o[toNumber(substr(q,2,1))-1])) ),'')))) ," "&if(w<10000,a[toNumber(substr(w,0,1))-1]& if(toNumber(substr(w,1,1))==0,""," "&h[toNumber(substr(w,1,1))-1])& if(toNumber(substr(w,2,1))==0, if(toNumber(substr(w,3,1))==0,""," "&o[toNumber(substr(w,3,1))-1]), if(toNumber(substr(w,2,1))==1," "&z[toNumber(substr(w,3,1))]," "&t[toNumber(substr(w,2,1))-1]&if(toNumber(substr(w,3,1))==0,""," "&o[toNumber(substr(w,3,1))-1])) ), " "&if(w<20000,if(w==10000,a[9],if(z==10,a[9],b[toNumber(substr(w,1,1))-1])& if(toNumber(substr(w,2,1))==0,""," "&h[toNumber(substr(w,2,1))-1])& if(toNumber(substr(w,3,1))==0, if(toNumber(substr(w,4,1))==0,""," "&o[toNumber(substr(w,4,1))-1]), if(toNumber(substr(w,3,1))==1," "&z[toNumber(substr(w,4,1))]," "&t[toNumber(substr(w,3,1))-1]&if(toNumber(substr(w,4,1))==0,""," "&o[toNumber(substr(w,4,1))-1])) )), if(w<100000,t[toNumber(substr(w,0,1))-1]&if(toNumber(substr(e,1,1))==0," "&d," "&a[toNumber(substr(w,1,1))-1]) & if(toNumber(substr(w,2,1))==0,""," "&h[toNumber(substr(w,2,1))-1])& if(toNumber(substr(w,3,1))==0, if(toNumber(substr(w,4,1))==0,""," "&o[toNumber(substr(w,4,1))-1]), if(toNumber(substr(w,3,1))==1," "&z[toNumber(substr(w,4,1))]," "&t[toNumber(substr(w,3,1))-1]&if(toNumber(substr(w,4,1))==0,""," "&o[toNumber(substr(w,4,1))-1])) ), "") ) )), "Продолжать тут") ) ) ) ) ) ) ) )
Число прописными буквами с дробными числами
javascriptlet({ units: ["ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"], teens: ["десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"], tens: ["", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"], hundreds: ["", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"], number: var1, // Разделяем число на целую и дробную части integerPart: floor(number), decimalPart: round((number - floor(number)) * 100), // Умножаем на 100 для обработки до сотых долей // Функция для преобразования целой части getIntegerPart: let({ n: integerPart, h: floor(n % 1000 / 100), t: floor((n % 100) / 10), u: n % 10, hundredText: if(h > 0, hundreds[h] & " ", ""), tenText: if(t == 1, teens[u], if(t > 1, tens[t] & " ", "") & if(t != 1 and u > 0, units[u], "")) }, hundredText & tenText), // Функция для преобразования тысяч getThousands: let({ tn: floor(integerPart / 1000) % 1000, th: floor(tn / 100), tt: floor((tn % 100) / 10), tu: tn % 10, thousandText: if(th > 0, hundreds[th] & " ", ""), tenThousandText: if(tt == 1, teens[tu], if(tt > 1, tens[tt] & " ", "") & if(tt != 1 and tu > 0, if(tu == 1, "одна", if(tu == 2, "две", units[tu]) ) & " ", "") ), thousandsWord: ['тысяча', 'тысячи', 'тысяч'][if( tn % 100 > 4 and tn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(tn % 10 > 5, 5, tn % 10)] )] }, if(tn > 0, thousandText & tenThousandText & " " & thousandsWord & " ", "")), // Функция для преобразования миллионов getMillions: let({ mn: floor(integerPart / 1000000), mh: floor(mn / 100), mt: floor((mn % 100) / 10), mu: mn % 10, millionText: if(mh > 0, hundreds[mh] & " ", ""), tenMillionText: if(mt == 1, teens[mu], if(mt > 1, tens[mt] & " ", "") & if(mt != 1 and mu > 0, units[mu], "")), millionsWord: ['миллион', 'миллиона', 'миллионов'][if( mn % 100 > 4 and mn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(mn % 10 > 5, 5, mn % 10)] )] }, if(mn > 0, millionText & tenMillionText & " " & millionsWord & " ", "")), // Функция для преобразования дробной части getDecimalPart: let({ dn: decimalPart, dt: floor(dn / 10), du: dn % 10, tenDecimalText: if(dt == 1, teens[du], if(dt > 1, tens[dt] & " ", "") & if(dt != 1 and du > 0, if(du == 1, "одна", if(du == 2, "две", units[du]) ), "")), decimalsWord: ['сотая', 'сотых', 'сотых'][if( dn % 100 > 4 and dn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(dn % 10 > 5, 5, dn % 10)] )] }, if(dn > 0, tenDecimalText & " " & decimalsWord, "")), // Сборка результата result: getMillions & getThousands & getIntegerPart & if(decimalPart > 0, " и " & getDecimalPart, "") }, result)
Число прописью в рублях и копейках
javascriptlet({ units: ["ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"], teens: ["десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"], tens: ["", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"], hundreds: ["", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"], number: var1, // Разделяем число на целую и дробную части integerPart: floor(number), decimalPart: round((number - floor(number)) * 100), // Умножаем на 100 для обработки до сотых долей // Функция для преобразования целой части getIntegerPart: let({ n: integerPart, h: floor(n % 1000 / 100), t: floor((n % 100) / 10), u: n % 10, hundredText: if(h > 0, hundreds[h] & " ", ""), tenText: if(t == 1, teens[u], if(t > 1, tens[t] & " ", "") & if(t != 1 and u > 0, units[u], "")) }, hundredText & tenText), // Функция для преобразования тысяч getThousands: let({ tn: floor(integerPart / 1000) % 1000, th: floor(tn / 100), tt: floor((tn % 100) / 10), tu: tn % 10, thousandText: if(th > 0, hundreds[th] & " ", ""), tenThousandText: if(tt == 1, teens[tu], if(tt > 1, tens[tt] & " ", "") & if(tt != 1 and tu > 0, if(tu == 1, "одна", if(tu == 2, "две", units[tu]) ) & " ", "") ), thousandsWord: ['тысяча', 'тысячи', 'тысяч'][if( tn % 100 > 4 and tn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(tn % 10 > 5, 5, tn % 10)] )] }, if(tn > 0, thousandText & tenThousandText & " " & thousandsWord & " ", "")), // Функция для преобразования миллионов getMillions: let({ mn: floor(integerPart / 1000000), mh: floor(mn / 100), mt: floor((mn % 100) / 10), mu: mn % 10, millionText: if(mh > 0, hundreds[mh] & " ", ""), tenMillionText: if(mt == 1, teens[mu], if(mt > 1, tens[mt] & " ", "") & if(mt != 1 and mu > 0, units[mu], "")), millionsWord: ['миллион', 'миллиона', 'миллионов'][if( mn % 100 > 4 and mn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(mn % 10 > 5, 5, mn % 10)] )] }, if(mn > 0, millionText & tenMillionText & " " & millionsWord & " ", "")), // Функция для преобразования дробной части getDecimalPart: let({ dn: decimalPart, dt: floor(dn / 10), du: dn % 10, tenDecimalText: if(dt == 1, teens[du], if(dt > 1, tens[dt] & " ", "") & if(dt != 1 and du > 0, if(du == 1, "одна", if(du == 2, "две", units[du]) ), "")), decimalsWord: ['копейка', 'копейки', 'копеек'][if( dn % 100 > 4 and dn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(dn % 10 > 5, 5, dn % 10)] )] }, if(dn > 0, tenDecimalText & " " & decimalsWord, "")), // Сборка результата rublesWord: ['рубль', 'рубля', 'рублей'][if( integerPart % 100 > 4 and integerPart % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(integerPart % 10 > 5, 5, integerPart % 10)] )], result: getMillions & getThousands & getIntegerPart & " " & rublesWord & if(decimalPart > 0, " и " & getDecimalPart, "") }, result)
Число с рублями прописью, а копейки числами
javascriptlet({ units: ["ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"], teens: ["десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"], tens: ["", "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"], hundreds: ["", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"], number: var1, // Разделяем число на целую и дробную части integerPart: floor(number), decimalPart: round((number - floor(number)) * 100), // Умножаем на 100 для обработки до сотых долей // Функция для преобразования целой части getIntegerPart: let({ n: integerPart, h: floor(n % 1000 / 100), t: floor((n % 100) / 10), u: n % 10, hundredText: if(h > 0, hundreds[h] & " ", ""), tenText: if(t == 1, teens[u], if(t > 1, tens[t] & " ", "") & if(t != 1 and u > 0, units[u], "")) }, hundredText & tenText), // Функция для преобразования тысяч getThousands: let({ tn: floor(integerPart / 1000) % 1000, th: floor(tn / 100), tt: floor((tn % 100) / 10), tu: tn % 10, thousandText: if(th > 0, hundreds[th] & " ", ""), tenThousandText: if(tt == 1, teens[tu], if(tt > 1, tens[tt] & " ", "") & if(tt != 1 and tu > 0, if(tu == 1, "одна", if(tu == 2, "две", units[tu]) ) & " ", "") ), thousandsWord: ['тысяча', 'тысячи', 'тысяч'][if( tn % 100 > 4 and tn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(tn % 10 > 5, 5, tn % 10)] )] }, if(tn > 0, thousandText & tenThousandText & " " & thousandsWord & " ", "")), // Функция для преобразования миллионов getMillions: let({ mn: floor(integerPart / 1000000), mh: floor(mn / 100), mt: floor((mn % 100) / 10), mu: mn % 10, millionText: if(mh > 0, hundreds[mh] & " ", ""), tenMillionText: if(mt == 1, teens[mu], if(mt > 1, tens[mt] & " ", "") & if(mt != 1 and mu > 0, units[mu], "")), millionsWord: ['миллион', 'миллиона', 'миллионов'][if( mn % 100 > 4 and mn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(mn % 10 > 5, 5, mn % 10)] )] }, if(mn > 0, millionText & tenMillionText & " " & millionsWord & " ", "")), // Функция для преобразования дробной части getDecimalPart: let({ dn: decimalPart, dt: floor(dn / 10), du: dn % 10, decimalsWord: ['копейка', 'копейки', 'копеек'][if( dn % 100 > 4 and dn % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(dn % 10 > 5, 5, dn % 10)] )] }, if(dn > 0, dn & " " & decimalsWord, "")), // Сборка результата rublesWord: ['рубль', 'рубля', 'рублей'][if( integerPart % 100 > 4 and integerPart % 100 < 20, 2, [2, 0, 1, 1, 1, 2][if(integerPart % 10 > 5, 5, integerPart % 10)] )], fullResult: getMillions & getThousands & getIntegerPart & " " & rublesWord & if(decimalPart > 0, " " & getDecimalPart, ""), result: upper(substr(fullResult, 0, 1)) & substr(fullResult, 1) }, result)
Валидация поля email с помощью формулы
Пример работы формулы
https://cremax.ru/formula-playground?saved=63pxyf02m45jb414k8954esm
javascript///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Формула для адаптации введеных email в нормальный вид для возможности в дальнейшем работать с данным email // // Автор: Соловей Дмитрий (Студия NCHub) // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Суть работы формулы: // // 1. Собираем массив разрешенных симоволов в email // // 2. Считаем количество символов в исходной строке // // 3. Генерируем массив равной длинне строки // // 4. Преобразовываем этот массив так, чтобы 1 символ был на каждый элемент массива // // 5. Фильтруем только те значения, которые разрешены // // 6. Склеиваем для возвращения строки // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// email = 'Криворуков Мальберт Юзерович <krivirukov@malbert.com>'; execude = ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z', '@', '1','2','3','4','5','6','7','8','9','0','.','_','-']; length = email.length(); range(0,length).map(substr(email,item,1)).filter(item in execude).join()
Определение возраста пользователя
Пример работы формулы:
https://cremax.ru/formula-playground?saved=63t3ql79ml2c85fq52m27y5i
javascriptlet({ dateUser: toNumber(split(data.fields.dateBirth, '.')[2]), dateYearNow: toNumber(split(toString(now()), '-')[0]) }, dateYearNow-dateUser) Где вместо data.fields.dateBirth ваша переменная с датой рождения в формате: data: { fields: { dateBirth: "1.08.1994" } Такое поле можно взять в библиотеке компонентов: https://creatium.io/library/vybor-daty