1. C++ / Говнокод #7713

    +153

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    // ...
    if (m_parent->GetState() == Disconnected)
    {
    	CString login;
    	CString password;
    	m_login.GetWindowText(login);
    	m_password.GetWindowText(password);
    
    	if (login.IsEmpty()
    		|| password.IsEmpty())
    	{
    		::MessageBox(this->m_hWnd, _T("Please enter login and password"), _T("Input error"),MB_OK);
    		return;
    	}
    		
    	if (CheckString(login)
    		|| CheckString(password))
    	{
    		::MessageBox(this->m_hWnd, _T("You have entered unsupported symbol."), _T("Input error"), MB_OK);
    		m_login.SetWindowText(login);
    		m_password.SetWindowText(password);
    		
    		return;
    	}
    
    	SaveConfig();
    }
    
    // ...
    
    
    bool CheckString(CString& string)
    {
    	bool res = false;
    	CString checked = _T("<>,!()[]{}~`#$%^&*+=/\\\"|;:'");
    	for (int i = 0; i < checked.GetLength(); ++i)
    	{
    		if (string.Find(checked[i]) != -1)
    		{
    			res = true;
    			string = _T("");
    			break;
    		}
    	}
    
    	return res;
    }

    Проверка допустимых символов

    Запостил: kandul, 31 Августа 2011

    Комментарии (7) RSS

    • 1. CheckString написан, конечно, не оптимально, но зато наглядно, тут это лучше.
      2. CheckString меняет string это не гуд, т.к. не соответствует названию ф-ции
      3. Стоит ли вообще сбрасывать набранный кривой пароль? - наверное да. а вот логин точно не стоит.
      4. Почему пароль не может быть пустым? Секьюрно? тогда уж не менее 8 символов, 3 из 4-х типов символов (буквы, цифры, большие буквы, символы).
      мож еще что не заметил?
      Ответить
      • > мож еще что не заметил?
        Что сайт называется govnokod.ru, а не stackoverflow.com?
        Ответить
      • 1. Возможно, но почему не использовать что-то похожее на CString::FindOneOf.

        В моем описании не указано, но логин является почтовым адресов, что делает эту проверку очень сомнительной. Если у нас ситуация, что логин - это почтовый адрес, а пароль - это секьюрный пароль, то тогда эта функция просто неуместна.

        Как мне кажется гораздо удобней в данном случае использовать DDX и DDV, так как это довольно простой MFC диалог. Сама проверка в таком виде будет отсутствовать совсем. Либо использовать старые добрые регулярные выражения.
        Ответить
    • 1. Первое, что бросилось в глаза:
      if (m_parent->GetState() == Disconnected)
      если нету коннекта, то запрашиваем пароль и логин?
      Может, если не авторизованы...

      2. Название метода CheckString очень не нравиться! Пока не прочел тело функции, не понял,
      что он делает. А когда читаешь if, то вообще непонятно, что CheckString возвращает.
      По моему, лучше if (loginOk(login) && passwdOk(passwd)) ... (вместо loginOk и passwdOk может быть просто inputOk или isInputOk().

      3. CheckString предполагает только Check, а не Modify.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • - Иди уже спать, шатаются неизвестно где, как будто на них пахали.
      Ответить

    Добавить комментарий