Запрет символов в никах и цифровых ников, Запрет символов в никах и цифровых ников |
Здравствуйте, гость ( Вход | Регистрация )
Запрет символов в никах и цифровых ников, Запрет символов в никах и цифровых ников |
17.2.2010, 0:23
Сообщение
#1
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
В общем я маленько въехал, но это всё равно для меня очень сложно.
Я понял, что там где можно обойтись без этих скобок лучше их опускать. Но в моём случае они нужны, потому что захват не являеться постояным, а заключён в переменную. Так? Добавил скобки всё работает! Скрипт можно перести в готовые... Disallow.lua ( 560 байт ) Кол-во скачиваний: 48 Функции скрипта -- Запрет символов в никах -- Заперет ников состоящих только из цифр |
|
|
14.2.2010, 6:51
Сообщение
#2
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Здравствуйте! Как Вы уже поняли нужен скрипт запрещающий использовать цифровые (состоящие только из цифр) ники.
Это не то! Т.к. тут идёт запрет определёных символов в конце и начале ника, А нужно запрещать вход на хаб никам, состоящими только из цифр. Тобишь, я не хочу запрещать цифры в никах, но хочу запретить вход пользователям, чьи ники состоят только из цифр. Например: 12345 13579 123654 384257 - Запретить использование таких ников! DrakonSP123 Вася15 536Сергей - Ники такого рода запрещать не надо! Скрипт не бред, потому что проблема очевидна... На хаб за день могут зайти десятки уникальных пользователей с ником 12345. Но самая жара начинаеться, когда какой-нибудь умник с ником 12345 регистрируеться, И догадайтесь с каким паролем? |
|
|
14.2.2010, 10:57
Сообщение
#3
|
|
Продвинутый участник Группа: Пользователи Сообщений: 153 Регистрация: 21.9.2008 Из: Челябинск Пользователь №: 574 Спасибо сказали: 54 раза |
Что-то вроде такого:
Код function ValidateNickArrival(tUser)
if not string.find(tUser.sNick,"%D") then Core.SendToUser(tUser, "Ники состоящие только из цифр запрещены") Core.Disconnect(tUser) end end |
|
|
14.2.2010, 17:14
Сообщение
#4
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Смущает меня такая регулярка, я бы сделал вот так:
Код function ValidateNickArrival(tUser)
if tUser.sNick:match("^(%d+)$") then Core.SendToUser(tUser, "Ники состоящие только из цифр запрещены") Core.Disconnect(tUser) end end |
|
|
14.2.2010, 17:33
Сообщение
#5
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Лучше вот так:
Код function ValidateNickArrival(tUser) if tUser.sNick:find"^%d+$" then Core.SendToUser(tUser, "Ники состоящие только из цифр запрещены") Core.Disconnect(tUser) end end Захват (%d+) лучше не делать, так как это лишние действия, и вместо match в условии использовать find. Так как интерпретатору проще сравнить число, которое возвращает find, со значением boolean, чем сравнивать строку, которую возвращает match. Ведь строка - это массив символов. Намного проще работать с числами, чем с массивами. Не делая захваты, строк вообще не будет, а метод find вернёт только 2 числа (начало и конец регулярного выражения, если таковое было обнаружено). |
|
|
14.2.2010, 22:32
Сообщение
#6
|
|
Освоившийся участник Группа: Пользователи Сообщений: 226 Регистрация: 11.11.2009 Пользователь №: 4 990 Спасибо сказали: 18 раз |
1
|
|
|
14.2.2010, 22:36
Сообщение
#7
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Так сделай маленькую модификацию скрипта выше:
Код tExept = {
["911"] = true, } function ValidateNickArrival(tUser) if not tExept[tUser.sNick] and tUser.sNick:find"^%d+$" then Core.SendToUser(tUser, "Ники состоящие только из цифр запрещены") Core.Disconnect(tUser) end end |
|
|
16.2.2010, 1:46
Сообщение
#8
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Хочу сделать скрипт по своим фунциям схожим вот с этим
Но по системе ValidateNickArrival и find Мне всего лишь надо что бы мне подсказали с захватом А то ещё недостаток вышеуказанного скрипта, то что там идёт разделение запрещ. символ в начале и в конце ника. Напишите пожалуйста пример захвата который искал бы к примеру запрещёный символ @ во всем нике (в какой бы части он не находился) Дальше я сам разберусь... Надеюсь Или это возможно только по такой системе? Код "^(%@)" - В начале ника "(%@)" - В конце ника Спасибо! |
|
|
16.2.2010, 10:47
Сообщение
#9
|
|
Продвинутый участник Группа: Пользователи Сообщений: 153 Регистрация: 21.9.2008 Из: Челябинск Пользователь №: 574 Спасибо сказали: 54 раза |
Код tUser.sNick:find"^(@)" -- в начале ника (1й символ) tUser.sNick:find"(@)" -- на любом месте в нике tUser.sNick:find"(@)$" -- не уверен, но думаю это будет отлавливать в конце ника (последний символ) Если нужен именно сам факт нахождения символа в нике, то скобки можно убрать (они нужны именно для захвата символа). а вообще вот тут очень полезная информация по таким вопросам: http://mydc.ru/topic266.html |
|
|
16.2.2010, 19:31
Сообщение
#10
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Пишу вот так:
Код tUser.sNick:find"(@)" -- на любом месте в нике Он действительно отлавливает символ @ в любом месте ника. так же я хочу запрещать символ ! например. Пишу: Код tUser.sNick:find"(@!)" И скрипт не отлавливает ничего ни @ ни ! Как быть? может я чего не так делаю? |
|
|
16.2.2010, 19:48
Сообщение
#11
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
конечно! ты сейчас пытаешься найти в нике не каждый символ по отдельности а их комбинацию в определённом порядке.
|
|
|
16.2.2010, 20:14
Сообщение
#12
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
|
|
|
16.2.2010, 21:51
Сообщение
#13
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
правильнее будет:
Код tUser.sNick:find"([%!]) and tUser.sNick:find"([@])"
|
|
|
16.2.2010, 22:05
Сообщение
#14
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
|
|
|
16.2.2010, 22:20
Сообщение
#15
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
Условие and означает что в нике должны быть оба символа для его истинности. По-идее если надо проверить наличие одного из символов будет вернее использовать именно
Код tUser.sNick:find"([%!@])"
|
|
|
16.2.2010, 22:37
Сообщение
#16
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
А ещё 1 вопросик не подскажите ?
Хочу поместить захват в переменную и... Раскрывающийся текст Код local sbansymbol = "[%!@4]" function ValidateNickArrival(tUser) if tUser.sNick:find"("..sbansymbol..")" then Core.SendToUser(tUser,"*** Ваш ник содержит запрещённые символы!") Core.SendToUser(tUser,"*** Обратная связь: skobyanka.sp.hub@gmail.com") Core.Disconnect(tUser) end if tUser.sNick:find"^%d+$" then Core.SendToUser(tUser,"*** Ники состоящие только из цифр запрещены!") Core.SendToUser(tUser,"*** Обратная связь: skobyanka.sp.hub@gmail.com") Core.Disconnect(tUser) end end и... ошибка Цитата Disallow.lua:4: unfinished capture Меняю на: Раскрывающийся текст Код local sbansymbol = "([%!@4])" function ValidateNickArrival(tUser) if tUser.sNick:find""..sbansymbol.."" then Core.SendToUser(tUser,"*** Ваш ник содержит запрещённые символы!") Core.SendToUser(tUser,"*** Обратная связь: skobyanka.sp.hub@gmail.com") Core.Disconnect(tUser) end if tUser.sNick:find"^%d+$" then Core.SendToUser(tUser,"*** Ники состоящие только из цифр запрещены!") Core.SendToUser(tUser,"*** Обратная связь: skobyanka.sp.hub@gmail.com") Core.Disconnect(tUser) end end В чём трабла? |
|
|
16.2.2010, 22:41
Сообщение
#17
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Во-первых, символ ! не нуждается в экранировании.
Во-вторых, скобочки не нужно писать (если мы используем условие): Код if tUser.sNick:find"[!@]" then ...
|
|
|
16.2.2010, 23:03
Сообщение
#18
|
|
Главный ра******й тут... Группа: Главные администраторы Сообщений: 1 727 Регистрация: 18.5.2008 Из: RF, 2la Пользователь №: 1 Спасибо сказали: 776 раз |
if tUser.sNick:find""..sbansymbol.."" then В функцию можно передавать текстовый параметр целиком, без конкатенация, записывая его без скобок, во всех иных случаях скобки нужны (я предпочитаю их использовать всегда): Код if tUser.sNick:find(""..sbansymbol.."") then
|
|
|
16.2.2010, 23:07
Сообщение
#19
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Не одна проблема так другая
Сделал так: Раскрывающийся текст Код local sbansymbol = "[!]" -- Запрещённые символы function ValidateNickArrival(tUser) if tUser.sNick:find""..sbansymbol.."" then Core.SendToUser(tUser,"*** Ваш ник содержит запрещённые символы!") Core.SendToUser(tUser,"*** Обратная связь: skobyanka.sp.hub@gmail.com") Core.Disconnect(tUser) end if tUser.sNick:find"^%d+$" then Core.SendToUser(tUser,"*** Ники состоящие только из цифр запрещены!") Core.SendToUser(tUser,"*** Обратная связь: skobyanka.sp.hub@gmail.com") Core.Disconnect(tUser) end end Итог: Не пускает вообще ни кого, т.е. ник к примеру DrakonSP, а скрипт срабытывает! меняю Код "..sbansymbol.." на Код [!] всё работаетЯ в недоумении... Получаеться захват нельзя засунуть в переменную? А как же тут всё работает? |
|
|
17.2.2010, 0:02
Сообщение
#20
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В функцию можно передавать текстовый параметр целиком, без конкатенация, записывая его без скобок, во всех иных случаях скобки нужны (я предпочитаю их использовать всегда): естественно Код if tUser.sNick:find("[!@]") then и Код if tUser.sNick:find"([!@])" then различия очевидны. В первом случае скобки являются скобками метода find, во втором случае, скобки - это захват символа. Естественно их надо различать.Как уже было сказано, если строка является постоянным строковым литералом, то скобки можно опускать. Я предпочитаю опускать скобки почти везде, где это можно делать и не только у функции, но и просто по приоритету операций. Можно написать так: Код if ((a and b) or (c and d)) then А можно тоже самое писать без скобок, зная приоритеты выполнения операций.То же самое касается и конструкторов таблиц. Пример: Код function F(tab) for i,v in pairs(tab) do ... end end Вызов этой функции может быть такой: Код F({1,2,3,4,5}) Но можно и по-другому вызвать (без скобок):Код F{1,2,3,4,5} Данный "сахар" смотрится очень красиво и эффектно в некоторых случаях, поэтому я и опускаю скобки. Однако, кто не гонится за сокращение на пару символов кода, и кому нужна наглядность и практичность, а не элегантность, могут ставить скобки, - дело вкуса и понимания Пример эффектной функции: Код function prnt(x) Напишите в птохе и проверьте, что этот код действительно работает. Согласитесь, что если бы мы написали prnt("one")("two")("three"), то было бы тоже забавно, но не так, как 3 строковых литерала подряд )))
if x then Core.SendToAll(x) return prnt end end prnt "one" "two" "three" |
|
|
Похожие темы
|
Сейчас: 27.11.2024, 1:51 |