Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защита от дурака, Проверка правильности вводимых данных 
:(
    Опции темы
diadiavova
Дата 16.7.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(SKrivosein @  16.7.2009,  16:13 Найти цитируемый пост)
 хотя я незнаю все возможные URL

Вот! Можно, конечно спецификацию изучить smile , только ИМХО - проще уж 
Цитата(SKrivosein @  16.7.2009,  17:08 Найти цитируемый пост)
знать что он есть  

 smile 
Я уже не говорю о том, что чем сложнее регексп, тем труднее контролировать его поведение, а уж о степени читабельности так и говорить нет смысла. В любом случае, если есть возможность воспользоваться готовым прибамбасом, то надо им воспользоваться. По крайней мере будет гарантия, что там всё учтено, включая неизвестные тебе особенности спецификации URL . 
А когда речь о нестандартном формате, то конечно.

Что касается адреса без указания протокола, то тут всё просто, перед проверкой надо с чего начинается строка адреса

Код

        static public bool IsCorrectFtpAddress(string addr)
        {
            var a = addr.StartsWith("ftp://") ? addr : "ftp://"+addr;
            if (Uri.IsWellFormedUriString(a, System.UriKind.Absolute))
            {
                var u = new Uri(a);
                if (u.Scheme == "ftp") return true;
            }
            return false; 
        }


Но лучше такую проверку осуществлять перед передачей значения в функцию (добавлять протокол в текстбокс при валидации).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 16.7.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



вот простой пример если я пишу  ftp://mail или ftp://mail.5ru то есть заведомо неправильно, то  IsCorrectFtpAddress пропускает, а регулярные выражения выдают ошибку, то есть это подтверждает, что они более гибкие и если правильно их составить, то и более надёжные, хотя это и логично smile

Добавлено через 3 минуты и 54 секунды
2 diadiavova  Дело в том, что  ftp:// сразу находится в TextBox при загрузке, то есть "TextBox.text=ftp://" это такая своеобразная подсказка, чтобы изначально не сделали ошибок хотя бы в этом
PM MAIL   Вверх
diadiavova
Дата 16.7.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(myendlessness @  16.7.2009,  17:25 Найти цитируемый пост)
правильно их составить, то и более надёжные

Ну дык ить...кто бы спорил...так это ж если правильно.

Добавлено через 4 минуты и 4 секунды
Цитата(myendlessness @  16.7.2009,  17:25 Найти цитируемый пост)
вот простой пример если я пишу  ftp://mail или ftp://mail.5ru то есть заведомо неправильно

Ну вот ты знаешь, что это заведомо неправильно, а вот для меня это новость. Я не знаю, какие адреса правильные, а какие нет. С другой стороны, что толку если человек введёт корректный, но никуда не ведущий адрес? smile

Добавлено через 5 минут и 15 секунд
Цитата(myendlessness @  16.7.2009,  17:25 Найти цитируемый пост)
чтобы изначально не сделали ошибок хотя бы в этом 

Ну ясно, тема ведь называется "Защита от..." smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 17.7.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



2 diadiavova 

Ну вот ты знаешь, что это заведомо неправильно, а вот для меня это новость. Я не знаю, какие адреса правильные, а какие нет. С другой стороны, что толку если человек введёт корректный, но никуда не ведущий адрес? 

От всех дураков обезопасить просто невозможно smile  Хотя программа при обращении к несуществующему серверу скорее всего будет выдавать ошибку, поэтому надо будет её ловить и тогда от таких дураков тоже можно будет спастись smile  

Я хотел спросить как сделать так, чтобы если одна форма запущена, то нельзя было переключится на другую пока не закроешь запущенную?
PM MAIL   Вверх
diadiavova
Дата 17.7.2009, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(myendlessness @  17.7.2009,  11:24 Найти цитируемый пост)
Я хотел спросить как сделать так, чтобы если одна форма запущена, то нельзя было переключится на другую пока не закроешь запущенную? 

"Запущенную" надо запускать при помощи метода ShowDialog (а не Show)


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 17.7.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



Здорово, спасибо Вам за ответы  smile 

    В развитии темы хотел продолжить, вот скажите человек заносит адрес сервера,  дальше надо его запомнить, чтобы при следующей загрузке не надо было заносить ещё раз тоже самое. Как запомнить адрес? 

    Самый простой записать в файл! А когда много всяких параметров, и сохраняются в разное время, то как быть? Либо создавать для каждого параметра свой файл, либо хранить в одном, но как-то его структурировать! А есть ли другие сопсобы сохранения данных? 
PM MAIL   Вверх
Raistlin
Дата 17.7.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.5.2009

Репутация: нет
Всего: нет



Цитата(myendlessness @  17.7.2009,  10:57 Найти цитируемый пост)
  Самый простой записать в файл! А когда много всяких параметров, и сохраняются в разное время, то как быть? Либо создавать для каждого параметра свой файл, либо хранить в одном, но как-то его структурировать! А есть ли другие сопсобы сохранения данных? 



Идешь в свойства проекта (Alt-F7), там переходишь на вкладку Settings. Потом читаешь MSDN насчет Properties.Settings. 
PM MAIL   Вверх
diadiavova
Дата 17.7.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(myendlessness @  17.7.2009,  11:57 Найти цитируемый пост)
А есть ли другие сопсобы сохранения данных?  

Конечно. Первое, что приходит в голову - база данных. Но если данных не очень много, то можно и более простые средства использовать: 
XML - файл, настройки программы(Application Settings), последний вариант особенно удобно использовать если надо сохранять состояние элементов управления(например текст в текстбоксе), в этом случае можно всё организовать без единой строчки ручного кода, но даже для хранения других данных ручной код при использовании этого инструмента сильно упростится.

http://msdn.microsoft.com/ru-ru/library/k4s6c3a0.aspx

Это сообщение отредактировал(а) diadiavova - 17.7.2009, 11:19


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 17.7.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



Спасибо за рекомендации, буду разбираться!

Хотел уточнить как потом сбрасывать ErrorProvider, если вначале человек ошибся, а затем набрал правильно, то как удалить этот красный кружочек? Думал ErrorProvider.Clear но что-то ничего не убирается. Почитал о членах класса, тоже ничего другого не нашёл. 
PM MAIL   Вверх
diadiavova
Дата 17.7.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(myendlessness @  17.7.2009,  13:11 Найти цитируемый пост)
Хотел уточнить как потом сбрасывать ErrorProvider

Так же как и устанавливать, только пустую строку передать ему надо в качестве текста сообщения.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
SKrivosein
Дата 17.7.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Если у тебя все правильно написано то вобще по идее делать не чего не надо.
Когда пользователь исправит свой текст и идет дальше, то фокус уходит с текстбокса и срабатывает событие validating которое и уберёт значёк.
Разве что ты то в коде что-то поменял, то тогда руками убрать.

Код

void ftpTextBox_Validating(object sender, CancelEventArgs e)
{
       string error = null;       //опять вычистит эррор
       .......

       errorProvider.SetError((Control)sender, error);                //уберёт всё
}



P.S. diadiavova я кстати незнал что IsCorrectFtpAddress делает, или так где-то читал но забыл...так же спасибо за напоминание.
А по поводу что лучше, так это дело относительное. Я держусь точки зрения буддизма: "все цветы совершенны !"

Это сообщение отредактировал(а) SKrivosein - 17.7.2009, 14:04


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
diadiavova
Дата 17.7.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(SKrivosein @  17.7.2009,  15:02 Найти цитируемый пост)
я кстати незнал что IsCorrectFtpAddress делает

Хочу обратить твоё внимание, что IsCorrectFtpAddress - это имя метода, придуманное мною лично для этой темы, но в нём использован метод  IsWellFormedUriString, класса URI.

Цитата(SKrivosein @  17.7.2009,  15:02 Найти цитируемый пост)
А по поводу что лучше, так это дело относительное.

Ну я вроде как аргументировал. Удобство в нашем деле тоже не последний аргумент. Даже если проверять нестандартную строку, то регексп ИМХО всё равно лучше обернуть для удобства.  smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
myendlessness
Дата 20.7.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



Код

  private void textBox1_Validating(object sender, CancelEventArgs e)
        {
            string error = null;
            ErrorProvider f = new ErrorProvider();
            Regex re = new Regex(@"^((ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3})$");
            if (!re.IsMatch(textBox1.Text))
            {

                error = "Your adress is wrong!";
                e.Cancel = true;
                f.SetError((Control)sender, error);
            }

            else f.SetError((Control)sender, null);      
        }


Вот мой код, однако всё равно не убирает красный кружочек, даже когда правильно всё прописываю в TextBox? 
PM MAIL   Вверх
myendlessness
Дата 20.7.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 8.8.2008

Репутация: нет
Всего: нет



 И ещё вопрос smile  Почитал я про параметры приложения, сделал параметр в TextBox, как теперь его загрузить? Надо что-то прописать при загрузке формы или элемента. но как именно прописать? И далее, если пользователь изменит имя сервера, то оно перезапишется в параметре приложения? Если - нет, то как сделать так чтобы перезаписалось?
PM MAIL   Вверх
diadiavova
Дата 20.7.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(myendlessness @  20.7.2009,  11:22 Найти цитируемый пост)
сделал параметр в TextBox

Что это значит? Если ты связал свойство Text текстбокса с параметром, то значение этого свойства будет сохраняться даже после закрытия приложения. Для того, чтобы его сменить, надо просто в текстбоксе написать другую строку.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.