Перейти к содержанию
Авторизация  
bboyspek

Недопустимые символы

Рекомендуемые сообщения

Добрый вечер уважаемые пользователи форума.

Нужна ваша помощь. Проблема в следующем, хочу на сервере поставить НПС с возможностью смены ника. В целом все работает, ник меняется.

НО, в поле для смены ника можно поставить любой симвл, сдлеать ник любой длины (например одну букву или восклицательный знак"). Можно написать ника вида [Adm]Pro ну и тд.

Подскажите пожалуйста, что необходимо прописать в коде, что бы ник был:

Не короче 6 символов

Не содержал русского алфавита

Не содержал набор определенных символов (например ` " & *), а лучше что бы код был вида - запрет всех символов кроме - ! @ ~ % [ ] ну и тд

 

В коде только прописан запрен на ввод словосочетаний типа GM. ADM.

Помогите дописать необходимые правила.

И собственно как выглядит сам код:

     if nick == "":
       htmltext += "Вы не ввели желаемый ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext
     elif nick.startswith("GM.") or nick.startswith("ADM.") or nick.startswith("EGM.") or nick.startswith("-"):
       htmltext += "Неправильный ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext
     elif nick.endswith(".GM") or nick.endswith(".ADM") or nick.endswith(".EGM"):
       htmltext += "Неправильный ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый вечер уважаемые пользователи форума.

Нужна ваша помощь. Проблема в следующем, хочу на сервере поставить НПС с возможностью смены ника. В целом все работает, ник меняется.

НО, в поле для смены ника можно поставить любой симвл, сдлеать ник любой длины (например одну букву или восклицательный знак"). Можно написать ника вида [Adm]Pro ну и тд.

Подскажите пожалуйста, что необходимо прописать в коде, что бы ник был:

Не короче 6 символов

Не содержал русского алфавита

Не содержал набор определенных символов (например ` " & *), а лучше что бы код был вида - запрет всех символов кроме - ! @ ~ % [ ] ну и тд

 

В коде только прописан запрен на ввод словосочетаний типа GM. ADM.

Помогите дописать необходимые правила.

И собственно как выглядит сам код:

     if nick == "":
       htmltext += "Вы не ввели желаемый ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext
     elif nick.startswith("GM.") or nick.startswith("ADM.") or nick.startswith("EGM.") or nick.startswith("-"):
       htmltext += "Неправильный ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext
     elif nick.endswith(".GM") or nick.endswith(".ADM") or nick.endswith(".EGM"):
       htmltext += "Неправильный ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext

Удалите строчки

elif StringUtil.isAllowedRegExp(nick) == False:
       htmltext += "Ru En 0-9 ~ ! @ # $ % ^ & * ( ) _ + - : > <<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Удалите строчки

elif StringUtil.isAllowedRegExp(nick) == False:
       htmltext += "Ru En 0-9 ~ ! @ # $ % ^ & * ( ) _ + - : > <<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext

Очень жаль, но в коде нет такой строки

	import sys
from java.lang import System
from java.util import Iterator
from ru.catssoftware import L2DatabaseFactory
from ru.catssoftware.tools.random import Rnd
from ru.catssoftware.gameserver.model.quest import State
from ru.catssoftware.gameserver.model.quest import QuestState
from ru.catssoftware.gameserver.model.quest.jython import QuestJython as JQuest
from time import gmtime, strftime

qn = "1235_ShadowName"

print "***Donate Manager by TigloN, Name - Loaded***"

NPC = 298030
ITEM = 4037 # итем необходимый для обмена
COST = 15 # стоимость
INAME = "Coin Of Luck" # название итема

class Quest (JQuest) :

 def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

 def onAdvEvent (self,event,npc,player):
   st = player.getQuestState(qn)
   if event == "step1":
     if st.getQuestItemsCount(ITEM) < COST:
       htmltext = "<html><body>Смена ника: <font color=74bff5>"+str(COST)+" "+INAME+"</font></body></html>"
       return htmltext
     #elif player.getClanId():
       #htmltext = "<html><body>Для смены ника вам необходимо выйти из клана<br>Вы сможете вступить вновь, сразу после смены ника<br>Если вы кланлидер - перекиньте клан на твинка</body></html>"
       #return htmltext
     htmltext = "<html><body><center><img src=\"L2UI_CH3.herotower_deco\" width=256 height=32><br><img src=\"L2UI.SquareBlank\" width=260 height=2><br1>"       
     htmltext += "Введите желаемый ник:"
     htmltext += "<edit var=\"nick\" width=200 length=\"16\"><br>"
     htmltext += "<button value=\"Проверить\" action=\"bypass -h Quest 1235_ShadowName step2_ $nick\" width=204 height=20 back=\"sek.cbui36\" fore=\"sek.cbui75\"><br>"
     htmltext += "<img src=\"L2UI_CH3.herotower_deco\" width=256 height=32></center></body></html>"
   elif event.startswith("step2_"):
     nick = str(event.replace("step2_", ""))
     nick = str(nick.replace(" ", ""))
     htmltext = "<html><body><center>Смена ника:<br>Проверка...<br><br>"
     if nick == "":
       htmltext += "Вы не ввели желаемый ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext
     elif nick.startswith("GM.") or nick.startswith("ADM.") or nick.startswith("EGM.") or nick.startswith("-"):
       htmltext += "Неправильный ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext
     elif nick.endswith(".GM") or nick.endswith(".ADM") or nick.endswith(".EGM"):
       htmltext += "Неправильный ник!<br><br>"
       htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
       return htmltext
    #<
     cona=L2DatabaseFactory.getInstance().getConnection()
     getcount=cona.prepareStatement("SELECT COUNT(char_name) FROM characters WHERE char_name=?")
     getcount.setString(1,nick)
     rsc=getcount.executeQuery()
     if (rsc.next()):
       if rsc.getInt(1) == 1:
         htmltext = "<font color=dc143c>Ник "+nick+" уже занят.</font><br>"
         htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Вернуться.</a></body></html>"
         return htmltext
     rsc.close()
     getcount.close()
     cona.close()
    #< 
     htmltext += "<font color=bef574>Ник "+nick+" свободен.</font><br>"
     htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step3_"+nick+"\" msg=\"Новый ник "+nick+". Уверены?\">Продолжить. </a><br><br>"
     htmltext += "<a action=\"bypass -h Quest 1235_ShadowName step1\">Назад</a></body></html>"
   elif event.startswith("step3"):
     nick = str(event.replace("step3_", ""))
     if st.getQuestItemsCount(ITEM) < COST:
       htmltext = "<html><body>Смена ника: <font color=74bff5>"+str(COST)+" "+INAME+"</font></center></body></html>"
       return htmltext
    #<
     login = str(player.getAccountName()) 
     name = str(player.getName())
     date = str(strftime("%Y-%m-%d", gmtime()))
     time = str(strftime("%H:%M:%S", gmtime()))
     writelog=L2DatabaseFactory.getInstance().getConnection()
     write=writelog.prepareStatement("INSERT INTO zz_donate_log (date,time,login,name,action,payment) VALUES (?,?,?,?,?,?)")
     write.setString(1, date)
     write.setString(2, time)
     write.setString(3, login)
     write.setString(4, name)
     write.setString(5, "Nick: "+nick+"")
     write.setInt(6, COST)
     try :
       write.executeUpdate()
       write.close()
       writelog.close()
     except :
       try : writelog.close()
       except : pass
    #<
     player.setName(nick)
     st.takeItems(ITEM,COST)
     htmltext =  "<html><body><center>Смена ника:<br>Готово.<br><font color=f5b974>Перезайдите!</font><br></body></html>"
   else:
     htmltext = "<html><body>Смена ника:<br>Oops!</center></body></html>"
   return htmltext

 def onTalk (self,npc,player):
   st = player.getQuestState(qn)
   npcId = npc.getNpcId()
   if npcId == NPC:
     self.startQuestTimer("step1",100,None,player)      
   return

QUEST       = Quest(1235,qn,"custom")

QUEST.addStartNpc(NPC)
QUEST.addTalkId(NPC)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А извиняюсь, не прочитал ваше сообщение.
Тогда вам нужно наоборот добавить этот код.
Учитывайте что в ядре должна быть функция 
public static boolean isAllowedRegExp(String string)
в StringUtil.java
Либо придется создать свою.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А  может  проше сделать через простой скрипт  сделать листинг и его проверку  и  не кто не отменял функцию .length() для лимита ника  либо мин либо макс

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что мешает использовать те же самые проверки что делаются при создании персонажа?

 

сэмпл

	if (!Util.isMatchingRegexp(newName, ServerConfig.CHAR_NAME_TEMPLATE))
	{
		player.sendMessage("Вы ввели некорректное имя.");
		return false;
	}
	@Setting(name = "CharNameTemplate")
	public static String CHAR_NAME_TEMPLATE = "[A-Za-z0-9\u0410-\u042f\u0430-\u044f]{2,16}";
	public static boolean isMatchingRegexp(String text, String template)
	{
		Pattern pattern = null;

		try
		{
			pattern = Pattern.compile(template);
		}
		catch (PatternSyntaxException e) // invalid template
		{
			e.printStackTrace();
		}

		if (pattern == null)
			return false;

		Matcher regexp = pattern.matcher(text);
		return regexp.matches();
	}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что мешает использовать те же самые проверки что делаются при создании персонажа?

 

сэмпл

	if (!Util.isMatchingRegexp(newName, ServerConfig.CHAR_NAME_TEMPLATE))
	{
		player.sendMessage("Вы ввели некорректное имя.");
		return false;
	}
	@Setting(name = "CharNameTemplate")
	public static String CHAR_NAME_TEMPLATE = "[A-Za-z0-9\u0410-\u042f\u0430-\u044f]{2,16}";
	public static boolean isMatchingRegexp(String text, String template)
	{
		Pattern pattern = null;

		try
		{
			pattern = Pattern.compile(template);
		}
		catch (PatternSyntaxException e) // invalid template
		{
			e.printStackTrace();
		}

		if (pattern == null)
			return false;

		Matcher regexp = pattern.matcher(text);
		return regexp.matches();
	}

Поскольку я не вильно разбираюсь в скриптах не могли бы вы прокомментировать куда вставлять данный код? На сколько я понимаю если будет проверка которая используется при создании чара то невозможно будет создать ник содержащий символы типа ! @ ~ ну и дт. А так не должно быть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ап, вопрос еще актуальный. Неужели никто не подскажет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ап, вопрос еще актуальный. Неужели никто не подскажет

пиши в скайп, решим наверное

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...