myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
4 страниц V  « < 2 3 4  
Ответить в данную темуНачать новую тему

> Функции Для Разработчиков, склад полезных функций

alex82
сообщение 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.

Обратите внимание: функция не приводит пароль к нижнему регистру. Вам необходимо сделать это самостоятельно перед вызовом функции.

Пример использования функции


Спасибо сказали:
Go to the top of the page
+Quote Post
ivan683
сообщение 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 " (Исправил примеры)

Используется мной здесь: https://github.com/ivan386/lua-dht


Спасибо сказали:
Go to the top of the page
+Quote Post
Enyby
сообщение 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
Go to the top of the page
+Quote Post
Alexey
сообщение 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: Понимаю, что в большинстве случаев можно прекрасно обойтись без этой функции, внося минимум правок, но не всегда хочется погружаться в глубины старого чужого говнокода.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 31.1.2013, 9:05
Сообщение #65


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Эм... функцию ipairs похоже тоже удалили.

Интересно а оператор #t будет работать?
Go to the top of the page
+Quote Post
Alexey
сообщение 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

Предполагается, что авторы скриптов знали как работает эта функция и применяли её с умом, иначе — ССЗБ и не я им доктор.
Go to the top of the page
+Quote Post
Setuper
сообщение 31.1.2013, 20:18
Сообщение #67


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




http://www.corsix.org/content/look-lua-52-work3

Цитата
19. ipairs, table.maxn, and math.log10 all deprecated
Go to the top of the page
+Quote Post
Alexey
сообщение 31.1.2013, 21:31
Сообщение #68


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Зачем ссылаться на обсуждение черновой версии, вышедшей за полтора года до релиза? Давай лучше посмотрим в официальное эталонное руководство по Lua 5.2.

Не все изменения из черновика попали в релиз
http://www.lua.org/manual/5.2/manual.html#8.2

ipairs осталась в 5.2
http://www.lua.org/manual/5.2/manual.html#pdf-ipairs
Go to the top of the page
+Quote Post
Tsd
сообщение 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
Прикрепленные файлы
Прикрепленный файл  iconv.zip ( 34.76 килобайт ) Кол-во скачиваний: 20
 


Спасибо сказали:
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 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

Подскажите, где я не прав?
Go to the top of the page
+Quote Post
Ksan
сообщение 25.2.2019, 19:51
Сообщение #71


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




MIKHAIL, ну проверьте сами. Какие проблемы?
(вдаваться в тонкости не стал, сейчас не до того, но добрый совет "проверьте сами" я всегда готов дать)..
Go to the top of the page
+Quote Post
Sacrificer
сообщение 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'
Go to the top of the page
+Quote Post

4 страниц V  « < 2 3 4
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Вопрос по функции
0 000000 3 961 7.1.2018, 12:55 Посл. сообщение: 000000
No new От: Функции Для Разработчиков
От темы с ID: 334
19 Nickolya 17 480 22.2.2014, 15:22 Посл. сообщение: Ksan
No New Posts От: Вызов функции без возврата
От темы с ID: 4632
1 LoT 5 550 3.2.2011, 8:08 Посл. сообщение: ScOol
No New Posts Вызов функции без возврата
1 dimajak 7 492 1.2.2011, 2:55 Посл. сообщение: Ksan
No New Posts ВАЖНО: Topic has attachmentsФункции ===> Читаем, Дабы Не Задавать Вопросов <===
Скрипт-интерфейс PtokaX Lua. ВСЕ СКРИПТОВЫЕ ФУНКЦИИ PtokaX API
6 Svyat 36 533 11.10.2010, 15:50 Посл. сообщение: Nickolya
No New Posts Общие функции
хочется меньше писанины и больше скорости
1 RAND(i)M 5 878 9.9.2010, 0:01 Посл. сообщение: alex82
Closed ВАЖНО: Topic has attachmentsLua Api Функции Hex Хаба
Описание функций
1 Jaska 10 274 22.6.2010, 22:07 Посл. сообщение: Saymon21
No new Topic has attachmentsИщу разработчиков ADC Хабов
обменяться мнениями.
28 SysMan 37 170 9.4.2010, 10:16 Посл. сообщение: Delion
No New Posts От: Функции ===> Читаем, Дабы Не Задавать Вопросов <===
От темы с ID: 118
1 Setuper 6 162 20.2.2010, 22:54 Посл. сообщение: _Герой_
Moved Ищу разработчиков ADC Хабов
обменяться мнениями.
0 SysMan 0 3.7.2009, 19:57 Посл. сообщение: SysMan
No New Posts Topic has attachmentsLua Api Функции Hex Хаба
Описание функций
3 Setuper 8 557 3.6.2009, 18:31 Посл. сообщение: Jaska
No New Posts Защта от функции грейлинка
Как обезопасить себя и хаб
2 valdis73 7 174 25.4.2009, 17:55 Посл. сообщение: valdis73
No New Posts Функции Irc бота
Написать функции
1 zangriEBP 6 694 25.4.2009, 10:48 Посл. сообщение: zangriEBP
No New Posts От: Функции ===> Читаем, Дабы Не Задавать Вопросов <===
От темы с ID: 118
1 MEXAHuK 6 073 27.1.2009, 19:32 Посл. сообщение: MEXAHuK
No New Posts От: Функции
От темы с ID: 118
9 Wariner 13 219 26.11.2008, 16:00 Посл. сообщение: Setuper

 



RSS Сейчас: 19.3.2024, 5:32