При разработке страниц, содержащих HTML формы ввода, нужно всегда помнить, что есть обязательная информация, есть необязательная. Если пользователь при вводе, например, не заполнит обязательное поле «email», то на сервере в момент отработки скрипта и записи в базу данных может возникнуть ошибка.
Как правило, разработчики Web-приложений учитывают это, и если какие-то данные не были приняты на сервере CGI-скриптом, то последний возвращает опять страницу с «руганью» и формой для дозаполнения, тем самым избегая ошибки времени исполнения на сервере.
Но каждая передача данных на сервер — это лишнее время (с точки зрения пользователя), и лишняя загрузка сервера, на котором исполняется CGI-скрипт, что опять-таки за собой тянет увеличение времени ожидания. Поэтому, имея практически на каждом компьютере такие мощные средства, как JavaScript, реализованные в браузерах версий 4 и выше, вполне можно заставлять страницу саму себя проверять на корректность ввода данных в формы.
Известно, что HTML документ имеет объектно-ориентированную структуру, а посему, с помощью свойств и методов можно проверять объекты типа «элемент формы» на наличие в них данных.
В первую очередь, форма.
Стоит обратить внимание на две вещи:
- Вызов функции checkform() на событие onSubmit(т.е. на нажатие кнопки Submit)
- Атрибут 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++:
Решил сделать проверку так. Работает на все, включая пробелы точки и тире, и буквы
Насколько понимаю, Вы хотите вводить длинные десятичные числа без знака. Я думаю, что иногда полезней просто показать, чем долго и нудно исправлять.
Вот пример вроде бы под Ваши требования из вопроса:
Обратите внимание, что переменная в которую 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 или просто набор символов.