Функции Для Разработчиков, склад полезных функций |
Здравствуйте, гость ( Вход | Регистрация )
Функции Для Разработчиков, склад полезных функций |
20.2.2011, 12:48
Сообщение
#61
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Функция проверки пароля на безопасность:
Код tSequence = { {"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m",}, {"m", "n", "b", "v", "c", "x", "z", "l", "k", "j", "h", "g", "f", "d", "s", "a", "p", "o", "i", "u", "y", "t", "r", "e", "w", "q",}, {"й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю",}, {"ю", "б", "ь", "т", "и", "м", "с", "ч", "я", "э", "ж", "д", "л", "о", "р", "п", "а", "в", "ы", "ф", "ъ", "х", "з", "щ", "ш", "г", "н", "е", "к", "у", "ц", "й",}, {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0",}, {"0", "9", "8", "7", "6", "5", "4", "3", "2", "1",}, } function CheckPassword(pass) local passlen = #pass if passlen < 2 then return true end local tpass = {} for i = 1,passlen do table.insert(tpass,pass:sub(i,i)) end local success = false for i = 2,passlen do if tpass[i] ~= tpass[1] then success = true break end end if not success then return false, "Пароль не может состоять из одинаковых символов" end for i,v in ipairs(tSequence) do success = false local first for n,c in ipairs(v) do if c == tpass[1] then first = n break end end if first then for i = 2,passlen do first = first+1 if not v[first] or v[first] ~= tpass[i] then success = true break end end if not success then return false, "Пароль не может состоять из клавиатурных последовательностей (qwerty, 123456, и.т.д.)" end end end return true end Функция возвращает false и сообщене об ошибке, если пароль состоит из одинаковых символов или клавиатурной последовательности. В противном случае возвращает true. Обратите внимание: функция не приводит пароль к нижнему регистру. Вам необходимо сделать это самостоятельно перед вызовом функции. Пример использования функции |
|
|
25.9.2011, 21:32
Сообщение
#62
|
|
Начинающий Группа: Пользователи Сообщений: 12 Регистрация: 15.7.2009 Пользователь №: 3 884 Спасибо сказали: 8 раз |
serialize3.lua ( 8.28 килобайт )
Кол-во скачиваний: 22
Ловите монстра. )) Собственно работает так: Код serialize(table, write_fnc) С table я думаю понятно а вот write_fnc это функция которой по ходу выполнения передаются куски текста. Тем самым давая возможность оптимизировать способ его сборки. Если результат нужно вывести в файл то делается так: Код local file = io.open("file_name.lua","w") file:write("x = ") serialize(_G, function(part) file:write(part) end) Ну либо в сочетании со string_builder Код var builder = new_string_builder() builder.add("return ") serialize(_G, builder.add) print(builder.get()) Ах да. Забыл сказать о преимуществах. 1 Генерирует красивый и понятный код. 2 Восстанавливает внутренние связи. 3 Проверяет особые случаи (бесконечность, -бесконечность, неопределённость). 4 Дампит функции если возможно. P.S. совсем забыл что перед результатом деятельности этой функции надо записать либо "x=" либо "return " (Исправил примеры) Используется мной здесь: |
|
|
23.1.2012, 0:46
Сообщение
#63
|
|
Освоившийся участник Группа: Пользователи Сообщений: 391 Регистрация: 4.11.2009 Из: Дом Пользователь №: 4 923 Спасибо сказали: 239 раз |
Функции для создания лога быстрой отладки. Строки лога содержатся в памяти, причем не более чем iMaxFastDebug строк. При добавлении новой строки самый старый вариант удалятся, т. н. ротация сообщений.
Код local tFastDebug = {} local iMaxFastDebug = 30 function LogFastDebug(sMsg) if #tFastDebug >= iMaxFastDebug then table.remove(tFastDebug, 1) end table.insert(tFastDebug, sMsg) end function GetFastDebug() local sRet = "" for i, sMsg in ipairs(tFastDebug) do sRet = sRet..i..". "..sMsg.."\n" end return sRet end Пример использования Сообщает раз в 10 секунд операторам лог входа/выхода пользователей. Код function UserConnected(tUser) LogFastDebug(os.time().." "..tUser.sNick.." connected") end OpConnected, RegConnected = UserConnected, UserConnected function UserDisconnected(tUser) LogFastDebug(os.time().." "..tUser.sNick.." disconnected") end OpDisconnected, RegDisconnected = UserDisconnected, UserDisconnected function OnStartup() for _, tUser in ipairs(Core.GetOnlineUsers()) do UserConnected(tUser) end TmrMan.AddTimer(10*1000, "CheckPtokaX") end function CheckPtokaX() Core.SendToOps(GetFastDebug()) end local tFastDebug = {} local iMaxFastDebug = 30 function LogFastDebug(sMsg) if #tFastDebug >= iMaxFastDebug then table.remove(tFastDebug, 1) end table.insert(tFastDebug, sMsg) end function GetFastDebug() local sRet = "" for i, sMsg in ipairs(tFastDebug) do sRet = sRet..i..". "..sMsg.."\n" end return sRet end |
|
|
30.1.2013, 20:56
Сообщение
#64
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
В Lua5.2 удалили функцию table.maxn и предлагают писать её на Луа самостоятельно, если она действительно нужна. Вот три варианта этой функции, если кому надо:
Код table.maxn = function(t) local maxn = 0 for i in pairs(t) do if type(i) == "number" and i > maxn then maxn = i end end return maxn end Код table.maxn = function(t) local maxn, i = 0 repeat i = next(t,i) if type(i) == "number" and i > maxn then maxn = i end until not i return maxn end Код table.maxn = function(t) local maxn, i = 0, next(t) while i do if type(i) == "number" and i > maxn then maxn = i end i = next(t,i) end return maxn end PS: Понимаю, что в большинстве случаев можно прекрасно обойтись без этой функции, внося минимум правок, но не всегда хочется погружаться в глубины старого чужого говнокода. |
|
|
31.1.2013, 9:05
Сообщение
#65
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Эм... функцию ipairs похоже тоже удалили.
Интересно а оператор #t будет работать? |
|
|
31.1.2013, 12:11
Сообщение
#66
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
Функция ipairs на месте, но она тут не подходит, как и оператор #.
Стояла цель написать замену table.maxn с максимально похожим поведением, а не что-то другое. Проверка идентичности результатов работы функций на Lua 5.1.4: Код local t = {"aaa", "bbb", ["a1"] = "xxx", [5] = "zzz"} print(table.maxn1(t), table.maxn2(t), table.maxn3(t), table.maxn(t), #t) 5 5 5 5 2 Предполагается, что авторы скриптов знали как работает эта функция и применяли её с умом, иначе — ССЗБ и не я им доктор. |
|
|
31.1.2013, 20:18
Сообщение
#67
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Цитата 19. ipairs, table.maxn, and math.log10 all deprecated
|
|
|
31.1.2013, 21:31
Сообщение
#68
|
|
7 квадратиков Группа: Модераторы Сообщений: 793 Регистрация: 21.1.2009 Пользователь №: 1 895 Спасибо сказали: 301 раз |
Зачем ссылаться на обсуждение черновой версии, вышедшей за полтора года до релиза? Давай лучше посмотрим в официальное эталонное руководство по Lua 5.2.
Не все изменения из черновика попали в релиз ipairs осталась в 5.2 |
|
|
22.2.2014, 12:35
Сообщение
#69
|
|
Продвинутый участник Группа: Пользователи Сообщений: 176 Регистрация: 11.7.2008 Пользователь №: 171 Спасибо сказали: 182 раза |
Может кому пригодится...
Функция автоматически определяет кодировку (ansi\utf-8) в сообщении и возвращает сообщение в ansi, если оно в utf-8 или nil при ошибке конвертации. Для правильной работы необходима библиотека iconv Код local tRus = {
"А","Б","В","Г","Д","Е",--[["Ё",]]"Ж","З","И","Й","К","Л","М","Н","О","П",--[["Р","С",]]"Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ы","Ъ","Ь","Э","Ю","Я", "а","б","в","г","д","е",--[["ё",]]"ж","з","и","й","к","л","м","н","о","п",--[["р","с",]]"т","у","ф","х","ц","ч","ш","щ","ь","ы","ъ","э","ю","я" } function DecodeMsg(s) for _,v in pairs (tRus) do if string.find(s,v) then return s end end s = (s:convert("utf-8","cp1251")) return s end Сообщение отредактировал Tsd - 23.2.2014, 11:45
Прикрепленные файлы
|
|
|
25.2.2019, 0:06
Сообщение
#70
|
|
KEEP CLEAR AT ALL TIMES Группа: Пользователи Сообщений: 141 Регистрация: 4.9.2011 Из: Беларусь, Минск Пользователь №: 9 667 Спасибо сказали: 3 раза |
Для функции Utf8ToAnsi(s) из данного преобразования
Код function Utf8ToAnsi(s) ... if b < 128 then if nmdc[b] then r = r..nmdc[b] else r = r..string.char(b) end ... end несовсем очевидна необходимость подобного преобразования протокольных разделителей "$" и "|", ведь вплоть до 128 ASCII-символа ничего не меняется, да и не экранируются они тут – как были в UTF-8 так и остались в ANSI. Я это вижу так: Код function Utf8ToAnsi(s) ... if b < 128 then r = r..string.char(b) ... end Подскажите, где я не прав? |
|
|
25.2.2019, 19:51
Сообщение
#71
|
|
Белый Волк Группа: Пользователи Сообщений: 1 723 Регистрация: 11.9.2008 Из: г.Томск Пользователь №: 516 Спасибо сказали: 657 раз |
MIKHAIL, ну проверьте сами. Какие проблемы?
(вдаваться в тонкости не стал, сейчас не до того, но добрый совет "проверьте сами" я всегда готов дать).. |
|
|
10.8.2022, 11:16
Сообщение
#72
|
|
Абсолютный новичок Группа: Пользователи Сообщений: 1 Регистрация: 10.8.2022 Пользователь №: 14 087 Спасибо сказали: 0 раз |
Добрый день
Прошу помощи в такой проблеме. Нужена функция (именно lua) которая берет английские буквы и переделывает их в русские и функция с обратным процессом. Кодировка UTF-8 в обоих случаях. Простая транслитерация. Шаблон такой: 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ж' => 'zh', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n','о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch', 'ь' => '', 'ы' => 'y', 'ъ' => '','э' => 'e', 'ю' => 'yu', 'я' => 'ya','А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G','Д' => 'D','Е' => 'E', 'Ж' => 'Zh', 'З' => 'Z', 'И' => 'I','Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N','О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T','У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'Ts', 'Ч' => 'Ch','Ш' => 'Sh', 'Щ' => 'Sch', 'Ь' => '', 'Ы' => 'Y', 'Ъ' => '','Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya' |
|
|
Похожие темы
|
Сейчас: 23.11.2024, 1:33 |