Посетители сайта — это наше всё. Их надо холить, лелеять, заботиться о них. А еще им нельзя доверять… Чтобы сайт не взломали, всегда и везде необходимо проверять введенные пользователем данные. Делать это лучше на сервере соответствующими средствами.
Проверка клиентским JavaScript легко обходится отключением js в браузере и предназначена она не для борьбы со злоумышленниками, а для помощи тем, кто случайно допустил ошибку. Тоже очень благородное занятие :)
Приближаться к высокому идеалу удобного веб-сайта мы будем на примере формы отзыва на e-mail.
<form name="mailer" id="mailer" action="/mail.php" method="post" onsubmit="return checkmailform();">
E-mail отправителя:<br /> <input type="text" name="mailsender" id="mailsender" /><br />
Текст письма:<br /> <textarea name="mailtext" id="mailtext" cols="35" rows="5"></textarea><br />
<input type="submit" value="Отправить" />
</form>
Форма состоит из полей ввода e-mail отправителя и текста сообщения и кнопки отправки данных серверному скрипту mail.php. Для формы и полей данных в атрибутах id и name (они идентичны, name используется для обратной совместимости) указаны уникальные имена, которыми мы будем оперировать в программе на JavaScript.
С помощью события документа (action) onsubmit, возникающего при отправке формы, мы вызываем JavaScript функцию, которая и отвечает за проверку введенных пользователем данных.
function checkmailform()
{
if ( (document.forms.mailer.mailsender.value == null) (document.forms.mailer.mailsender.value.length < 7) )
{
alert("Заполните поле: E-mail отправителя");
document.forms.mailer.mailsender.focus();
return false;
}
if (! (/^\w+[-_\.]*\w+@\w+-?\w+\.[a-z]{2,4}$/.test(document.forms.mailer.mailsender.value)) )
{
alert("Введите правильный e-mail адрес");
document.forms.mailer.mailsender.focus();
return false;
}
if ( (document.forms.mailer.mailtext.value == null) (document.forms.mailer.mailtext.value.length < 10) )
{
alert("Заполните поле: Текст письма");
document.forms.mailer.mailtext.focus();
return false;
}
return true;
}
К данным XHTML-формы мы обращаемся в следующем формате: документ.все_формы.имя_формы(у нас это name="mailer").имя_поля. Добавление «.value» дает нам текст внутри указанного по имени элемента формы, а «.value.length» — длину этого текста в символах.
Функция делает 3 проверки:
- Введен ли вообще текст в поле «E-mail отправителя» и не меньше ли он 7 символов.
- Регулярным выражением проверяет, является ли адрес отправителя правильным e-mail адресом: имя@домен.зонадомена.
- Введен ли текст сообщения и не меньше ли он 10 символов.
Если хотя бы одна из проверок не пройдена, работа скрипта останавливается, отправка данных формы на сервер отменяется, пользователь получает сообщение с ошибкой, а курсор клавиатуры помещается в поле формы, вызвавшее ошибку. Если проблем не обнаружено, JavaScript не мешает отправке данных на сервер.