myDC.ru

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

 

> Запрет символов в никах и цифровых ников, Запрет символов в никах и цифровых ников

Рейтинг 5 V
Теги
Нет тегов для показа
DrakonSP
сообщение 17.2.2010, 0:23
Сообщение #1


Продвинутый участник
****

Группа: Пользователи
Сообщений: 107
Регистрация: 23.11.2008
Из: Сергиев Посад
Пользователь №: 1 178
Спасибо сказали: 9 раз




В общем я маленько въехал, но это всё равно для меня очень сложно.
Я понял, что там где можно обойтись без этих скобок лучше их опускать.
Но в моём случае они нужны, потому что захват не являеться постояным, а заключён в переменную.
Так?
Добавил скобки всё работает! byebye.gif
Скрипт можно перести в готовые...
Прикрепленный файл  Disallow.lua ( 560 байт ) Кол-во скачиваний: 48

Функции скрипта

-- Запрет символов в никах
-- Заперет ников состоящих только из цифр
Go to the top of the page
+Quote Post
2 страниц V   1 2 >  
Начать новую тему
Ответов
DrakonSP
сообщение 14.2.2010, 6:51
Сообщение #2


Продвинутый участник
****

Группа: Пользователи
Сообщений: 107
Регистрация: 23.11.2008
Из: Сергиев Посад
Пользователь №: 1 178
Спасибо сказали: 9 раз




Здравствуйте! Как Вы уже поняли нужен скрипт запрещающий использовать цифровые (состоящие только из цифр) ники.
Это не то! Т.к. тут идёт запрет определёных символов в конце и начале ника,
А нужно запрещать вход на хаб никам, состоящими только из цифр.
Тобишь, я не хочу запрещать цифры в никах, но хочу запретить вход пользователям, чьи ники состоят только из цифр.

Например:
12345
13579
123654
384257 - Запретить использование таких ников!

DrakonSP123
Вася15
536Сергей - Ники такого рода запрещать не надо!

Скрипт не бред, потому что проблема очевидна...
На хаб за день могут зайти десятки уникальных пользователей с ником 12345.
Но самая жара начинаеться, когда какой-нибудь умник с ником 12345 регистрируеться,
И догадайтесь с каким паролем? big_smile1.gif
Go to the top of the page
+Quote Post
Serx
сообщение 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
Go to the top of the page
+Quote Post
Nickolya
сообщение 14.2.2010, 17:14
Сообщение #4


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 775 раз




Смущает меня такая регулярка, я бы сделал вот так:
Код
function ValidateNickArrival(tUser)
    if tUser.sNick:match("^(%d+)$") then
        Core.SendToUser(tUser, "Ники состоящие только из цифр запрещены")
        Core.Disconnect(tUser)
    end
end
Go to the top of the page
+Quote Post
Setuper
сообщение 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 числа (начало и конец регулярного выражения, если таковое было обнаружено).


Спасибо сказали:
Go to the top of the page
+Quote Post
random name
сообщение 14.2.2010, 22:32
Сообщение #6


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 226
Регистрация: 11.11.2009
Пользователь №: 4 990
Спасибо сказали: 18 раз




1
Go to the top of the page
+Quote Post
Nickolya
сообщение 14.2.2010, 22:36
Сообщение #7


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 775 раз




Так сделай маленькую модификацию скрипта выше:
Код
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
Go to the top of the page
+Quote Post
DrakonSP
сообщение 16.2.2010, 1:46
Сообщение #8


Продвинутый участник
****

Группа: Пользователи
Сообщений: 107
Регистрация: 23.11.2008
Из: Сергиев Посад
Пользователь №: 1 178
Спасибо сказали: 9 раз




Хочу сделать скрипт по своим фунциям схожим вот с этим
Но по системе ValidateNickArrival и find
Мне всего лишь надо что бы мне подсказали с захватом
А то ещё недостаток вышеуказанного скрипта, то что там идёт разделение запрещ. символ в начале и в конце ника.
Напишите пожалуйста пример захвата который искал бы к примеру запрещёный символ @ во всем нике (в какой бы части он не находился)
Дальше я сам разберусь... Надеюсь big_smile1.gif
Или это возможно только по такой системе?
Код
"^(%@)"  -  В начале ника
"(%@)"  -  В конце ника

Спасибо!
Go to the top of the page
+Quote Post
Serx
сообщение 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
Go to the top of the page
+Quote Post
DrakonSP
сообщение 16.2.2010, 19:31
Сообщение #10


Продвинутый участник
****

Группа: Пользователи
Сообщений: 107
Регистрация: 23.11.2008
Из: Сергиев Посад
Пользователь №: 1 178
Спасибо сказали: 9 раз




Пишу вот так:
Код
tUser.sNick:find"(@)" -- на любом месте в нике

Он действительно отлавливает символ @ в любом месте ника.
так же я хочу запрещать символ ! например. Пишу:
Код
tUser.sNick:find"(@!)"

И скрипт не отлавливает ничего ни @ ни !
Как быть? может я чего не так делаю?
Go to the top of the page
+Quote Post
Wariner
сообщение 16.2.2010, 19:48
Сообщение #11


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




конечно! ты сейчас пытаешься найти в нике не каждый символ по отдельности а их комбинацию в определённом порядке.
Go to the top of the page
+Quote Post
DrakonSP
сообщение 16.2.2010, 20:14
Сообщение #12


Продвинутый участник
****

Группа: Пользователи
Сообщений: 107
Регистрация: 23.11.2008
Из: Сергиев Посад
Пользователь №: 1 178
Спасибо сказали: 9 раз




Цитата(Wariner @ 16.2.2010, 19:48) *
конечно! ты сейчас пытаешься найти в нике не каждый символ по отдельности а их комбинацию в определённом порядке.

А вот так правильней будет?
Код
tUser.sNick:find"([%!@])"
Go to the top of the page
+Quote Post
Wariner
сообщение 16.2.2010, 21:51
Сообщение #13


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




правильнее будет:
Код
tUser.sNick:find"([%!]) and tUser.sNick:find"([@])"
Go to the top of the page
+Quote Post
DrakonSP
сообщение 16.2.2010, 22:05
Сообщение #14


Продвинутый участник
****

Группа: Пользователи
Сообщений: 107
Регистрация: 23.11.2008
Из: Сергиев Посад
Пользователь №: 1 178
Спасибо сказали: 9 раз




Цитата(Wariner @ 16.2.2010, 21:51) *
правильнее будет:
Код
tUser.sNick:find"([%!])" and tUser.sNick:find"([@])"

Не работает surrender.gif
Go to the top of the page
+Quote Post
Nickolya
сообщение 16.2.2010, 22:20
Сообщение #15


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 775 раз




Условие and означает что в нике должны быть оба символа для его истинности. По-идее если надо проверить наличие одного из символов будет вернее использовать именно
Код
tUser.sNick:find"([%!@])"


Спасибо сказали:
Go to the top of the page
+Quote Post
DrakonSP
сообщение 16.2.2010, 22:37
Сообщение #16


Продвинутый участник
****

Группа: Пользователи
Сообщений: 107
Регистрация: 23.11.2008
Из: Сергиев Посад
Пользователь №: 1 178
Спасибо сказали: 9 раз




А ещё 1 вопросик не подскажите byebye.gif ?
Хочу поместить захват в переменную и...
Раскрывающийся текст
Код
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

В чём трабла?
Go to the top of the page
+Quote Post
Setuper
сообщение 16.2.2010, 22:41
Сообщение #17


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

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




Во-первых, символ ! не нуждается в экранировании.
Во-вторых, скобочки не нужно писать (если мы используем условие):
Код
if tUser.sNick:find"[!@]" then ...


Спасибо сказали:
Go to the top of the page
+Quote Post
Nickolya
сообщение 16.2.2010, 23:03
Сообщение #18


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 775 раз




Цитата(DrakonSP @ 16.2.2010, 22:37) *
if tUser.sNick:find""..sbansymbol.."" then

В функцию можно передавать текстовый параметр целиком, без конкатенация, записывая его без скобок, во всех иных случаях скобки нужны (я предпочитаю их использовать всегда):
Код
    if tUser.sNick:find(""..sbansymbol.."") then


Спасибо сказали:
Go to the top of the page
+Quote Post
DrakonSP
сообщение 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.."
на
Код
[!]
всё работает
Я в недоумении...
Получаеться захват нельзя засунуть в переменную? А как же тут всё работает?
Go to the top of the page
+Quote Post
Setuper
сообщение 17.2.2010, 0:02
Сообщение #20


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

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




Цитата(Nickolya @ 16.2.2010, 23:03) *
В функцию можно передавать текстовый параметр целиком, без конкатенация, записывая его без скобок, во всех иных случаях скобки нужны (я предпочитаю их использовать всегда):


естественно
Код
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}

Данный "сахар" смотрится очень красиво и эффектно в некоторых случаях, поэтому я и опускаю скобки. Однако, кто не гонится за сокращение на пару символов кода, и кому нужна наглядность и практичность, а не элегантность, могут ставить скобки, - дело вкуса и понимания big_smile.gif

Пример эффектной функции:
Код
function prnt(x)
  if x then
    Core.SendToAll(x)
    return prnt
  end
end
prnt "one" "two" "three"
Напишите в птохе и проверьте, что этот код действительно работает. Согласитесь, что если бы мы написали prnt("one")("two")("three"), то было бы тоже забавно, но не так, как 3 строковых литерала подряд big_smile.gif)))


Спасибо сказали:
Go to the top of the page
+Quote Post

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

Collapse

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

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Зависание ников в списке юзеров
2 мамин_парень 4 697 4.9.2017, 19:38 Посл. сообщение: мамин_парень
No new Topic has attachmentsАнтитор, API2 | Запрет Tor
14 KCAHDEP 13 740 21.8.2016, 1:10 Посл. сообщение: 000000
No New Posts Запрет наказаний админов (ОПов) в одинаковых рангах
Банит один мастер другова
2 AndreiDC 4 656 31.10.2014, 20:30 Посл. сообщение: Артём
No New Posts Запрет на скачивания у интернет пользователей
Как запретить что бы пользователи с интерента не могли искать и скачив
1 reidel_viktor 6 052 12.1.2013, 16:19 Посл. сообщение: Артём
No New Posts Запрет на распространение
10 ke(x)one 10 265 31.8.2012, 14:56 Посл. сообщение: ANDRBEST
No New Posts RusHub: Запрет неразрывного пробела
rushub
11 ShadoWx 11 797 26.1.2012, 22:20 Посл. сообщение: Ksan
No New Posts Запрет перенаправления
0 ShadoWx 5 446 26.1.2012, 16:21 Посл. сообщение: ShadoWx
No New Posts Topic has attachmentsЗапрет поиска
определенныхслов\выражений
7 WINS 8 377 8.11.2011, 10:56 Посл. сообщение: WINS
No new Topic has attachmentsAntiproxy , Api2 | Запрет На Вход Юзеров С Прокси
API2 | по просьбам трудящихся ...
33 KauH™ 50 055 13.2.2011, 23:05 Посл. сообщение: absent
No New Posts antiproxy: запрет на прокси
API2
12 sphinx 18 155 12.2.2011, 22:21 Посл. сообщение: AirKobra45
No new Topic has attachmentsСкрипт запрета в никах заглавных букв
24 thehawk 25 264 20.8.2010, 14:21 Посл. сообщение: Alexey
No New Posts Topic has attachmentsЗапрет чата для всех кроме випов опов и админов
АПИ 2 версия 0.4.1.2
7 Vizunchik 10 755 4.8.2010, 15:36 Посл. сообщение: WINS
No New Posts Topic has attachmentsЗапрет пустого сообщения
API 2
4 WINS 6 935 20.7.2010, 15:20 Посл. сообщение: WINS
No new Topic has attachmentsПроверка ников на запретные слова
verlihub
21 Vizunchik 19 906 17.6.2010, 21:40 Посл. сообщение: Nickolya
No New Posts Topic has attachmentsЗапрет снятия банов, поставленных другими людьми
9 X-Sky 12 764 8.6.2010, 19:28 Посл. сообщение: Nickolya

 



RSS Сейчас: 9.8.2022, 10:18