Проверка на корректность ввода

При разработке страниц, содержащих HTML формы ввода, нужно всегда помнить, что есть обязательная информация, есть необязательная. Если пользователь при вводе, например, не заполнит обязательное поле «email», то на сервере в момент отработки скрипта и записи в базу данных может возникнуть ошибка.

Как правило, разработчики Web-приложений учитывают это, и если какие-то данные не были приняты на сервере CGI-скриптом, то последний возвращает опять страницу с «руганью» и формой для дозаполнения, тем самым избегая ошибки времени исполнения на сервере.

Но каждая передача данных на сервер — это лишнее время (с точки зрения пользователя), и лишняя загрузка сервера, на котором исполняется CGI-скрипт, что опять-таки за собой тянет увеличение времени ожидания. Поэтому, имея практически на каждом компьютере такие мощные средства, как JavaScript, реализованные в браузерах версий 4 и выше, вполне можно заставлять страницу саму себя проверять на корректность ввода данных в формы.

Известно, что HTML документ имеет объектно-ориентированную структуру, а посему, с помощью свойств и методов можно проверять объекты типа «элемент формы» на наличие в них данных.

В первую очередь, форма.

Стоит обратить внимание на две вещи:

  1. Вызов функции checkform() на событие onSubmit(т.е. на нажатие кнопки Submit)
  2. Атрибут required в двух полях — Name и E-mail

Значит в момент отправки формы вызывается функция checkform(). Вот она:

В общем — все понятно: передаем в качестве параметра форму, перебираем все элементы, если элемент имеет атрибут required, — проверяем его функцией isEmpty(). Если функция возвращает истину, — то строка пустая, если нет — то заполнена. Если строка пустая, то имя этого поля добавляется в переменную errMSG. Если errMSG оказывается не пустой строкой, то выводим сообщение об ошибке, и возвращаем в форму false, вследствие чего форма не отправляется на сервер.

Читайте также  Программы для обслуживания жесткого диска

Проверка правильности заполнения формы во время ввода

Можно проверять заполнение формы во время ввода данных в элементы управления. При этом надо отрабатывать события на этих элементах.

В данном случае обрабатывается событие onKeyPress.:

Где event.keyCode = скан-код нажатой клавиши.

Можно проверять элементы формы во время заполнения формы. Для этого нужно отрабатывать событие OnChange:

В данном случае после изменения поля отрабатывает скрипт, который проверяет, что было введено — текст или число, и изменяет стиль оформления данного элемента управления.:

Если использовать проверку правильности заполнения формы с помощью JavaScript , то можно здорово облегчить жизнь и пользователю и себе, особенно, когда придется писать CGI-скрипт и предусматривать внештатные ситуации типа несовпадения типов данных.

Пользователь вводит некоторую последовательность цифр с консоли, если он ввел все верно без пробелов и букв — выходим из цикла. Иначе — выводим надпись о неправильности ввода и просим повторить попытку. Ниже код, но вот только он даже на корректный ввод просит повторить попытку. Что не так?

5 ответов 5

Символ конца строки ‘
‘ не проходит проверку if (n[i] >= ‘0’ && n[i] .

Это должно быть перед вторым циклом.

А это — внутри, до if’а.

Тут ещё надо делать

Вы последним вводите символ ‘
‘ , который не проходит ваш тест.

Сделайте тогда уж так:

Тем более что в вашем коде при неправильном вводе остатки неверного ввода остаются в буфере и портят вам жизнь.

Update Вот совсем простой код на C++:

Решил сделать проверку так. Работает на все, включая пробелы точки и тире, и буквы

Насколько понимаю, Вы хотите вводить длинные десятичные числа без знака. Я думаю, что иногда полезней просто показать, чем долго и нудно исправлять.

Читайте также  Программа для чтения apk файлов на компьютере

Вот пример вроде бы под Ваши требования из вопроса:

Обратите внимание, что переменная в которую getchar()-ом читаем символ имеет тип int, а не char (!) (читайте man getchar ).

Возможно, для конечной цели вычислений с неопределенно длинными целыми более привлекателен подход, когда мы сразу получаем число в динамической памяти (выделенной malloc). Для этого идеально подходит функция GNU getline (если у Вас ее еще нет, то либо поставьте GCC, либо сами напишите ее (хотя бы в качестве упражнения в программировании)). Вызывая эту функцию мы вместе со строкой сразу получаем и ее длину.

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

Естественно, в вычислительной задаче после (или вместо) print() введенные данные надо где-то сохранить (копировать байты как раз необязательно, а вот указатель str для дальнейшего ввода надо обнулить) и вызывать free() только для ввода с ошибками.

Оба примера компилируется в Linux gcc и g++.

Возможностей проверить очень много:
1. Сохранить в строку и затем проверить, затем использовать atoi
2. Использовать scanf, указан выше
3. try/catch, указанный выше
4. cin

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

2й и 4й удобен простотой, но вы никогда не узнаете ввел ли пользователь 0 или просто набор символов.

Ссылка на основную публикацию
Adblock
detector