Javascript заполнение полей формы. Защита от дурака. Простая форма с проверкой

На iOS - iPhone, iPod touch 01.04.2019
На iOS - iPhone, iPod touch

Ethernet (читается эзернет , от лат. aether - эфир) - пакетная технология передачи данных преимущественно локальных
.

Стандарты Ethernet определяют проводные соединения и электрические сигналы на физическом уровне, формат
кадров и протоколы управления доступом к среде - на канальном уровне модели OSI. Ethernet в основном
описывается стандартами IEEE группы 802.3. Ethernet стал самой распространённой технологией ЛВС в середине
90-х годов прошлого века, вытеснив такие устаревшие технологии, как Arcnet, FDDI и Token ring.

История создания

Технология Ethernet была разработана вместе со многими первыми проектами корпорации Xerox PARC.
Общепринято считать, что Ethernet был изобретён 22 мая 1973 года, когда Роберт Меткалф (Robert Metcalfe)
составил докладную записку для главы PARC о потенциале технологии Ethernet. Но законное право на
технологию Меткалф получил через несколько лет. В 1976 году он и его ассистент Дэвид Боггс (David Boggs)
издали брошюру под названием «Ethernet: Distributed Packet-Switching For Local Computer Networks».

Меткалф ушёл из Xerox в 1979 году и основал компанию 3Com для продвижения компьютеров и локальных
вычислительных сетей (ЛВС). Ему удалось убедить DEC, Intel и Xerox работать совместно и разработать
стандарт Ethernet (DIX). Впервые этот стандарт был опубликован 30 сентября 1980 года. Он начал
соперничество с двумя крупными запатентованными технологиями: token ring и ARCNET, - которые вскоре были похоронены под накатывающимися волнами продукции Ethernet. В процессе борьбы 3Com стала основной компанией в этой отрасли.

Технология

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

Причинами перехода на были:

  • возможность работы в дуплексном режиме;
  • низкая стоимость кабеля «витой пары»;
  • более высокая надёжность сетей при неисправности в кабеле;
  • большая помехозащищенность при использовании дифференциального сигнала;
  • возможность питания по кабелю маломощных узлов, например IP-телефонов (стандарт Power over Ethernet, POE);
  • отсутствие гальванической связи (прохождения тока) между узлами сети. При использовании коаксиального кабеля в российских условиях, где, как правило, отсутствует заземление компьютеров, применение коаксиального кабеля часто сопровождалось пробоем сетевых карт, и иногда даже полным «выгоранием» системного блока.

Причиной перехода на оптический кабель была необходимость увеличить длину сегмента без повторителей.

Метод управления доступом (для сети на ) - множественный доступ с контролем несущей и
обнаружением коллизий (CSMA/CD, Carrier Sense Multiple Access with Collision Detection), скорость передачи
данных 10 Мбит/с, размер пакета от 72 до 1526 байт, описаны методы кодирования данных. Режим работы
полудуплексный, то есть узел не может одновременно передавать и принимать информацию. Количество узлов в
одном разделяемом сегменте сети ограничено предельным значением в 1024 рабочих станции (спецификации
физического уровня могут устанавливать более жёсткие ограничения, например, к сегменту тонкого коаксиала
может подключаться не более 30 рабочих станций, а к сегменту толстого коаксиала - не более 100). Однако
сеть, построенная на одном разделяемом сегменте, становится неэффективной задолго до достижения
предельного значения количества узлов, в основном по причине полудуплексного режима работы.

В 1995 году принят стандарт IEEE 802.3u Fast Ethernet со скоростью 100 Мбит/с и появилась возможность
работы в режиме полный дуплекс. В 1997 году был принят стандарт IEEE 802.3z Gigabit Ethernet со скоростью
1000 Мбит/с для передачи по оптическому волокну и ещё через два года для передачи по витой паре.

Разновидности Ethernet

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

Большинство Ethernet-карт и других устройств имеет поддержку нескольких скоростей передачи данных,
используя автоопределение (autonegotiation) скорости и дуплексности, для достижения наилучшего
соединения между двумя устройствами. Если автоопределение не срабатывает, скорость подстраивается под
партнёра, и включается режим полудуплексной передачи. Например, наличие в устройстве порта Ethernet
10/100 говорит о том, что через него можно работать по технологиям 10BASE-T и 100BASE-TX, а порт
Ethernet 10/100/1000 - поддерживает стандарты 10BASE-T, 100BASE-TX и 1000BASE-T.
Ранние модификации Ethernet

  • Xerox Ethernet - оригинальная технология, скорость 3Мбит/с, существовала в двух вариантах Version 1 и Version 2, формат кадра последней версии до сих пор имеет широкое применение.
  • 10BROAD36 - широкого распространения не получил. Один из первых стандартов, позволяющий работать на больших расстояниях. Использовал технологию широкополосной модуляции, похожей на ту, что используется
    в кабельных модемах. В качестве среды передачи данных использовался коаксиальный кабель.
  • 1BASE5 - также известный, как StarLAN, стал первой модификацией Ethernet-технологии, использующей витую пару. Работал на скорости 1 Мбит/с, но не нашёл коммерческого применения.

10 Мбит/с Ethernet

  • 10BASE5, IEEE 802.3 (называемый также «Толстый Ethernet») - первоначальная разработка технологии со скоростью передачи данных 10 Мбит/с. Следуя раннему стандарту IEEE использует коаксиальный кабель с волновым сопротивлением 50 Ом (RG-8), с максимальной длиной сегмента 500 метров.
  • 10BASE2, IEEE 802.3a (называемый «Тонкий Ethernet») - используется кабель RG-58, с максимальной длиной сегмента 185 метров, компьютеры присоединялись один к другому, для подключения кабеля к сетевой
    карте нужен T-коннектор, а на кабеле должен быть BNC-коннектор. Требуется наличие терминаторов на каждом
    конце. Многие годы этот стандарт был основным для технологии Ethernet.
  • StarLAN 10 - Первая разработка, использующая витую пару для передачи данных на скорости 10 Мбит/с.

В дальнейшем эволюционировал в стандарт 10BASE-T.

Несмотря на то, что теоретически возможно подключение к одному кабелю (сегменту) витой пары более чем
двух устройств, работающих в симплексном режиме, такая схема никогда не применяется для Ethernet, в
отличие от работы с . Поэтому, все сети на витой паре используют топологию «звезда»,
в то время как, сети на коаксиальном кабеле построены на топологии «шина». Терминаторы для работы по
витой паре встроены в каждое устройство, и применять дополнительные внешние терминаторы в линии не нужно.

  • 10BASE-T, IEEE 802.3i - для передачи данных используется 4 провода кабеля витой пары (две скрученные пары) категории-3 или категории-5. Максимальная длина сегмента 100 метров.
  • FOIRL - (акроним от англ. Fiber-optic inter-repeater link). Базовый стандарт для технологии Ethernet, использующий для передачи данных оптический кабель. Максимальное расстояние передачи данных без повторителя 1 км.
  • 10BASE-F, IEEE 802.3j - Основной термин для обозначения семейства 10 Мбит/с ethernet-стандартов, использующих оптический кабель на расстоянии до 2 километров: 10BASE-FL, 10BASE-FB и 10BASE-FP. Из перечисленного только 10BASE-FL получил широкое распространение.
  • 10BASE-FL (Fiber Link) - Улучшенная версия стандарта FOIRL. Улучшение коснулось увеличения длины сегмента до 2 км.
  • 10BASE-FB (Fiber Backbone) - Сейчас неиспользуемый стандарт, предназначался для объединения повторителей в магистраль.
  • 10BASE-FP (Fiber Passive)- Топология «пассивная звезда», в которой не нужны повторители - никогдане применялся.

Быстрый Ethernet (Fast Ethernet, 100 Мбит/с)

  • 100BASE-T - общий термин для обозначения стандартов, использующих в качестве среды передачи данных . Длина сегмента до 100 метров. Включает в себя стандарты 100BASE-TX, 100BASE-T4 и 100BASE-T2.
  • 100BASE-TX, IEEE 802.3u - развитие стандарта 10BASE-T для использования в сетях топологии «звезда». Задействована витая пара категории 5, фактически используются только две неэкранированные пары проводников, поддерживается дуплексная передача данных, расстояние до 100 м.
  • 100BASE-T4 - стандарт, использующий витую пару категории 3. Задействованы все четыре пары проводников, передача данных идёт в полудуплексе. Практически не используется.
  • 100BASE-T2 - стандарт, использующий витую пару категории 3. Задействованы только две пары проводников. Поддерживается полный дуплекс, когда сигналы распространяются в противоположных направлениях по каждой паре. Скорость передачи в одном направлении - 50 Мбит/с. Практически не используется.
  • 100BASE-SX - стандарт, использующий многомодовое волокно. Максимальная длина сегмента 400 метров в полудуплексе (для гарантированного обнаружения коллизий) или 2 километра в полном дуплексе.
  • 100BASE-FX - стандарт, использующий одномодовое волокно. Максимальная длина ограничена только
    величиной затухания в оптическом кабеле и мощностью передатчиков, по разным материалам от 2х до 10
    километров
  • 100BASE-FX WDM - стандарт, использующий одномодовое волокно. Максимальная длина ограничена только
    величиной затухания в волоконно-оптическом кабеле и мощностью передатчиков. Интерфейсы бывают двух
    видов, отличаются длиной волны передатчика и маркируются либо цифрами (длина волны) либо одной латинской
    буквой A(1310) или B(1550). В паре могут работать только парные интерфейсы: с одной стороны передатчик
    на 1310 нм, а с другой - на 1550 нм.
Гигабитный Ethernet (Gigabit Ethernet, 1 Гбит/с)
  • 1000BASE-T, IEEE 802.3ab - стандарт, использующий витую пару категорий 5e. В передаче данных участвуют 4 пары. Скорость передачи данных - 250 Мбит/с по одной паре. Используется метод кодирования PAM5, частота основной гармоники 62,5 МГц. Расстояние до 100 метров
  • 1000BASE-TX был создан Ассоциацией Телекоммуникационной Промышленности (англ. Telecommunications
    Industry Association, TIA) и опубликован в марте 2001 года как «Спецификация физического уровня
    дуплексного Ethernet 1000 Мб/с (1000BASE-TX) симметричных кабельных систем категории 6
    (ANSI/TIA/EIA-854-2001)» (англ. «A Full Duplex Ethernet Specification for 1000 Mbis/s (1000BASE-TX)
    Operating Over Category 6 Balanced Twisted-Pair Cabling (ANSI/TIA/EIA-854-2001)»). Стандарт, использует
    раздельную приёмо-передачу (по одной паре в каждом направлении), что существенно упрощает конструкцию
    приёмопередающих устройств. Ещё одним существенным отличием 1000BASE-TX является отсутствие схемы
    цифровой компенсации наводок и возвратных помех, в результате чего сложность, уровень энергопотребления
    и цена процессоров становится ниже, чем у процессоров стандарта 1000BASE-T. Но, как следствие, для
    стабильной работы по такой технологии требуется кабельная система высокого качества, поэтому 1000BASE-TX
    может использовать только кабель 6 категории. На основе данного стандарта практически не было создано
    продуктов, хотя 1000BASE-TX использует более простой протокол, чем стандарт 1000BASE-T, и поэтому может
    использовать более простую электронику.
  • 1000BASE-X - общий термин для обозначения стандартов со сменными приёмопередатчиками GBIC или SFP.
  • 1000BASE-SX, IEEE 802.3z - стандарт, использующий многомодовое волокно. Дальность прохождения
    сигнала без повторителя до 550 метров.
  • 1000BASE-LX, IEEE 802.3z - стандарт, использующий одномодовое волокно. Дальность прохождения
    сигнала без повторителя до 5 километров.


  • используется.
  • 1000BASE-CX - стандарт для коротких расстояний (до 25 метров), использующий твинаксиальный кабель
    с волновым сопротивлением 75 Ом (каждый из двух волноводов). Заменён стандартом 1000BASE-T и сейчас не
    используется.
  • 1000BASE-LH (Long Haul) - стандарт, использующий одномодовое волокно. Дальность прохождения
    сигнала без повторителя до 100 километров.

10-гигабитный Ethernet

Новый стандарт 10-гигабитного Ethernet включает в себя семь стандартов физической среды для LAN, MAN и
WAN. В настоящее время он описывается поправкой IEEE 802.3ae и должен войти в следующую ревизию
стандарта IEEE 802.3.

  • 10GBASE-CX4 - Технология 10-гигабитного Ethernet для коротких расстояний (до 15 метров), используется медный кабель CX4 и коннекторы InfiniBand.
  • 10GBASE-SR - Технология 10-гигабитного Ethernet для коротких расстояний (до 26 или 82 метров, в
    зависимости от типа кабеля), используется многомодовое волокно. Он также поддерживает расстояния до 300
    метров с использованием нового многомодового волокна (2000 МГц/км).
  • 10GBASE-LX4 - использует уплотнение по длине волны для поддержки расстояний от 240 до 300 метров по многомодовому волокну. Также поддерживает расстояния до 10 километров при использовании одномодового
    волокна.
  • 10GBASE-LR и 10GBASE-ER - эти стандарты поддерживают расстояния до 10 и 40 километров
    соответственно.
  • 10GBASE-SW, 10GBASE-LW и 10GBASE-EW - Эти стандарты используют физический интерфейс, совместимый
    по скорости и формату данных с интерфейсом OC-192 / STM-64 SONET/SDH. Они подобны стандартам 10GBASE-SR,
    10GBASE-LR и 10GBASE-ER соответственно, так как используют те же самые типы кабелей и расстояния передачи.
  • 10GBASE-T, IEEE 802.3an-2006 - принят в июне 2006 года после 4 лет разработки. Использует
    экранированную витую пару. Расстояния - до 100 метров.
  • Системное администрирование
    • Tutorial
    • Что такое домен коллизий?
    • Сколько пар используется для Ethernet и почему?
    • По каким парам идет прием, а по каким передача?
    • Что ограничивает длину сегмента сети?
    • Почему кадр не может быть меньше определенной величины?

    Если не знаешь ответов на эти вопросы, а читать стандарты и серьезную литературу по теме лень - прошу под кат.

    Кто-то считает, что это очевидные вещи, другие скажут, что скучная и ненужная теория. Тем не менее на собеседованиях периодически можно услышать подобные вопросы. Мое мнение: о том, о чем ниже пойдет речь, нужно знать всем, кому приходится брать в руки «обжимку» 8P8C (этот разъем обычно ошибочно называют RJ-45). На академическую глубину не претендую, воздержусь от формул и таблиц, так же за бортом оставим линейное кодирование. Речь пойдет в основном о медных проводах, не об оптике, т.к. они шире распространены в быту.

    Технология Ethernet описывает сразу два нижних уровня модели OSI . Физический и канальный. Дальше будем говорить только о физическом, т.е. о том, как передаются биты между двумя соседними устройствами.

    Технология Ethernet - часть богатого наследия исследовательского центра Xerox PARC . Ранние версии Ethernet использовали в качестве среды передачи коаксиальный кабель, но со временем он был полностью вытеснен оптоволокном и витой парой. Однако важно понимать, что применение коаксиального кабеля во многом определило принципы работы Ethernet. Дело в том, что коаксиальный кабель - разделяемая среда передачи. Важная особенность разделяемой среды: ее могут использовать одновременно несколько интерфейсов, но передавать в каждый момент времени должен только один. С помощью коаксиального кабеля можно соединит не только 2 компьютера между собой, но и более двух, без применения активного оборудования. Такая топология называется шина . Однако если хотябы два узла на одной шине начнут одновременно передавать информацию, то их сигналы наложатся друг на друга и приемники других узлов ничего не разберут. Такая ситуация называется коллизией , а часть сети, узлы в которой конкурируют за общую среду передачи - доменом коллизий . Для того чтоб распознать коллизию, передающий узел постоянно наблюдает за сигналов в среде и если собственный передаваемый сигнал отличается от наблюдаемого - фиксируется коллизия. В этом случае все узлы перестают передавать и возобновляют передачу через случайный промежуток времени.

    Диаметр коллизионного домена и минимальный размер кадра

    Теперь давайте представим, что будет, если в сети, изображенной на рисунке, узлы A и С одновременно начнут передачу, но успеют ее закончить раньше, чем примут сигнал друг друга. Это возможно, при достаточно коротком передаваемом сообщении и достаточно длинном кабеле, ведь как нам известно из школьной программы, скорость распространения любых сигналов в лучшем случае составляет C=3*10 8 м/с. Т.к. каждый из передающих узлов примет встречный сигнал только после того, как уже закончит передавать свое сообщение - факт того, что произошла коллизия не будет установлен ни одним из них, а значит повторной передачи кадров не будет. Зато узел B на входе получит сумму сигналов и не сможет корректно принять ни один из них. Для того, чтоб такой ситуации не произошло необходимо ограничить размер домена коллизий и минимальный размер кадра. Не трудно догадаться, что эти величины прямо пропорциональны друг другу. В случае же если объем передаваемой информации не дотягивает до минимального кадра, то его увеличивают за счет специального поля pad, название которого можно перевести как заполнитель.

    Таким образом чем больше потенциальный размер сегмента сети, тем больше накладных расходов уходит на передачу порций данных маленького размера. Разработчикам технологии Ethernet пришлось искать золотую середину между двумя этими параметрами, и минимальным размером кадра была установлена величина 64 байта.

    Витая пара и дуплексный режим рабтыВитая пара в качестве среды передачи отличается от коаксиального кабеля тем, что может соединять только два узла и использует разделенные среды для передачи информации в разных направлениях. Одна пара используется для передачи (1,2 контакты, как правило оранжевый и бело-оранжевый провода) и одна пара для приема (3,6 контакты, как правило зеленый и бело-зеленый провода). На активном сетевом оборудовании наоборот. Не трудно заметить, что пропущена центральная пара контактов: 4, 5. Эту пару специально оставили свободной, если в ту же розетку вставить RJ11, то он займет как раз свободные контакты. Таким образом можно использовать один кабели и одну розетку, для LAN и, например, телефона. Пары в кабеле выбраны таким образом, чтоб свести к минимуму взаимное влияние сигналов друг на друга и улучшить качество связи. Провода одной пару свиты между собой для того, чтоб влияние внешних помех на оба провода в паре было примерно одинаковым.
    Для соединения двух однотипных устройств, к примеру двух компьютеров, используется так называемый кроссовер-кабель(crossover) , в котором одна пара соединяет контакты 1,2 одной стороны и 3,6 другой, а вторая наоборот: 3,6 контакты одной стороны и 1,2 другой. Это нужно для того, чтоб соединить приемник с передатчиком, если использовать прямой кабель, то получится приемник-приемник, передатчик-передатчик. Хотя сейчас это имеет значение только если работать с каким-то архаичным оборудованием, т.к. почти всё современное оборудование поддерживает Auto-MDIX - технология позволяющая интерфейсу автоматически определять на какой паре прием, а на какой передача.

    Возникает вопрос: откуда берется ограничение на длину сегмента у Ethernet по витой паре, если нет разделяемой среды? Всё дело в том, первые сети построенные на витой паре использовали концентраторы. Концентратор (иначе говоря многовходовый повторитель) - устройство имеющее несколько портов Ethernet и транслирующее полученный пакет во все порты кроме того, с которого этот пакет пришел. Таким образом если концентратор начинал принимать сигналы сразу с двух портов, то он не знал, что транслировать в остальные порты, это была коллизия. То же касалось и первых Ethernet-сетей использующих оптику (10Base-FL).

    Зачем же тогда использовать 4х-парный кабель, если из 4х пар используются только две? Резонный вопрос, и вот несколько причин для того, чтобы делать это:

    • 4х-парный кабель механически более надежен чем 2х-парный.
    • 4х-парный кабель не придется менять при переходе на Gigabit Ethernet или 100BaseT4, использующие уже все 4 пары
    • Если перебита одна пара, можно вместо нее использовать свободную и не перекладывать кабель
    • Возможность использовать технологию Power over ethernet

    Не смотря на это на практике часто используют 2х-парный кабель, подключают сразу 2 компьютера по одному 4х-парному, либо используют свободные пары для подключения телефона.

    Gigabit Ethernet

    В отличии от своих предшественников Gigabit Ethernet всегда использует для передачи одновременно все 4 пары. Причем сразу в двух направлениях. Кроме того информация кодируется не двумя уровнями как обычно (0 и 1), а четырьмя (00,01,10,11). Т.е. уровень напряжения в каждый конкретный момент кодирует не один, а сразу два бита. Это сделано для того, чтоб снизить частоту модуляции с 250 МГц до 125 МГц. Кроме того добавлен пятый уровень, для создания избыточности кода. Он делает возможной коррекцию ошибок на приеме. Такой вид кодирования называется пятиуровневым импульсно-амплитудным кодированием (PAM-5). Кроме того, для того, чтоб использовать все пары одновременно для приема и передачи сетевой адаптер вычитает из общего сигнала собственный переданный сигнал, чтоб получить сигнал переданный другой стороной. Таким образом реализуется полнодуплексный режим по одному каналу.

    Дальше - больше

    10 Gigabit Ethernet уже во всю используется провайдерами, но в SOHO сегменте не применяется, т.к. судя по всему там вполне хватает Gigabit Ethernet. 10GBE качестве среды распространения использует одно- и многомодовое волокно, с или без уплотнением по длине волны , медные кабели с разъемом InfiniBand а так же витую пару в стандарте 10GBASE-T или IEEE 802.3an-2006.

    40-гигабитный Ethernet (или 40GbE ) и 100-гигабитный Ethernet (или 100GbE ). Разработка этих стандартов была закончена в июле 2010 года. В настоящий момент ведущие производители сетевого оборудования, такие как Cisco, Juniper Networks и Huawei уже заняты разработкой и выпуском первых маршрутизаторов поддерживающих эти технологии.

    В заключении стоит упомянуть о перспективной технологии Terabit Ethernet . Боб Меткалф, создатель предположил, что технология будет разработана к 2015 году, и так же сказал:

    Чтобы реализовать Ethernet 1 ТБит/с, необходимо преодолеть множество ограничений, включая 1550-нанометровые лазеры и модуляцию с частотой 15 ГГц. Для будущей сети нужны новые схемы модуляции, а также новое оптоволокно, новые лазеры, в общем, все новое

    UPD : Спасибо хабраюзеру , что подсказал, про то что разъем, который я всю жизнь называл RJ45 на самом деле 8P8C .
    UPD2: : Спасибо пользователю , что объяснил, почему используются контакты 1,2,3 и 6.

    Данный урок описывает, как создать JavaScript форму, которая проверяет правильность заполнения посетителем полей перед отправкой данных на сервер. Сначала мы объясним, почему проверка заполнения формы является полезной методикой, а затем построим простой пример с объяснением, как все происходит.

    Зачем нужна проверка заполнения формы?

    Проверка заполнения формы - процесс, при котором данные формы проверяются перед обработкой. Например, если Ваша форма имеет поле, в которое пользователь должен ввести email адрес, возможно Вы захотите проверить, что поле заполнено, прежде чем начать дальнейшую обработку формы.

    Существует два основных метода для проверки заполнения формы: на стороне сервера (с использованием CGI скриптов, ASP и т.д.) и на стороне клиента (обычно используется JavaScript). Проверка на стороне сервера более безопасная, но в большинстве случаев требует более сложного кода, в то время как проверка на стороне клиента выполняется проще и быстрее (браузер не нуждается в соединении с сервером для проверки заполнения формы, таким образом, пользователь получает немедленный ответ в случае пропущенных полей, которые необходимо заполнить).

    Проверка формы на стороне клиента. Обычно выполняется с помощью встроенного JavaScript скрипта.

    Проверка формы на стороне сервера. Обычно выполняется с помощью CGI или ASP скрипта.

    В данном уроке мы построим простую форму с проверкой на стороне клиента с помощью JavaScript. Вы сможете затем адаптировать ее под свои нужды.

    Простая форма с проверкой.

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

    Откройте форму и посмотрите в действии. Попробуйте нажать кнопку "Отправить данные" ничего не вводя в поле "Ваше имя".

    Страница содержит функцию JavaScript, которая называется validate_form(). Она выполняет проверку заполнения формы. давайте посмотрим сначала на форму.

    Форма

    Первая часть формы - тэг form

    Форма имеет имя contact_form. С его помощью мы получим доступ к форме из JavaScript функции проверки.

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

    Также тэг form содержит onsubmit атрибут для вызова JavaScript функции проверки validate_form (), когда нажимается кнопка "Отправить данные". Функция возвращает логическое значение, для которого true означает "проверка прошла успешно", а false - "данные задержаны". Таким образом мы можем предотвратить отправку данных формы, если пользователь не заполнил ее правильно.

    Остальной код формы добавляет поле ввода contact_name и кнопку "Отправить данные":

    Пожалуйста введите Ваше имя.

    Ваше имя:

    Функция validate_form()

    Функция проверки формы validate_form() встроена в секцию head вначале страницы:

    Первая строчка () указывает браузеру, что далее идет код JavaScript, а коментарий HTML (


    Применённый нами способ вызова функции через событие onsubmit в качестве результата работы функции требует возврата одного из логических значений: true или false. И, в зависимости от этого значения, форма либо будет отправлена, либо нет.

    Теперь попробуем написать проверочную функцию, привязанную к данной конкретной форме. Как Вы помните, необходимых для заполнения полей у нас всего два: имя посетителя и его электронный адрес. Самое простое - это проверить содержимое каждого из обязательных полей на отсутствие текста:


    < script language = "javascript" >


    Как видите, функция проверки состоит из двух идентичных блоков, различающихся только именем проверяемого поля. Давайте прокомментируем каждую строчку в этих блоках:

    Сначала проверяем, что данное поле является пустым. И если это так, то
    выводим сообщение об ошибке при помощи встроенной функции alert(). После того, как пользователь закроет окошко, мы
    воспользуемся методом focus() и переместим курсор на ошибочное поле. И, наконец,
    выйдем из функции, установив флажок успешности выполнения в false.
    В случае же, если проверяемое поле не было пустым, то соответствующий блок просто пропускается. При пропуске всех проверочных блоков функция в качестве результата возвращает true, что свидетельствует об успешной проверке.

    Универсальная функция проверки

    Если нам необходимо проверить всего два или три поля, то с таким методом проверки "по-одиночке" ещё можно смириться, но что, если их несколько десятков? А ведь такое не редкость - особенно в сложных анкетах. Поэтому мы немного модифицируем нашу функцию, чтобы она не зависела от количества проверяемых полей.

    Первым делом мы создадим массив, где перечислим имена всех полей, которые требуют проверки:

    Required = new array("name", "email");

    Такой подход позволит нам очень легко добавлять и модифицировать список обязательных полей без непосредственного изменения кода самой функции.

    Дополнительно к вышеописанному массиву мы добавим ещё один, который будет содержать текст ошибки для конкретного поля:

    Required_show = new array("Ваше имя", "электронный адрес");

    Это позволит нам свободно варьировать текст об ошибках и правильно пользоваться русским языком, а не удовольствоваться неудобоваримыми фразами типа "name не введён".

    Имея массив обязательных для заполнения полей, всю проверку можно осуществлять в цикле. Вот как будет выглядеть модифицированная функция проверки:


    < script language = "javascript" >


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

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

    Назад
    В нашем примере у нас 5 полей, которые необходимо заполнить:

    - имя
    - сообщение
    - e-mail
    - контактный телефон
    - контрольное число для защиты

    Помимо простой проверки на пустоту поля, мы покажем

    как проверить правильно ли введен e-mail и телефон

    Проверять поля мы будем с помощью JavaScript. В последнее поле необходимо ввести определенное число (для защиты от автоматического заполнения). Если поля будут пустыми, появится alert-окно с уведомлением. К данному скрипту мы сразу прибавили отправку заполненной формы на почту, делать мы это будет с помощью php.

    Итак, создаем файл index.php и пишем туда следующую форму:

    1. Ваше имя:



    2. Сообщение:



    3. E-Mail



    4. Контактный телефон



    3. Введите сумму 10+10





    Создаем файл data.js , пишем в него код проверки:
    function Formdata(data){
    /* если не заполнено поле Ваше имя, длина менее 3-x*/
    if (data.fnm != null && data.fnm.value.length < 3)
    {
    alert("Заполните поле "Ваше имя"");
    return false;}

    /* если не заполнено поле Сообщение */
    if (data.text != null && data.text.value.length < 3)
    {
    alert("Заполните поле "Сообщение"");
    return false;}

    /* e-mail Юзера */
    if(data.email != null && data.email.value.length == 0)
    {
    alert("поле "E-Mail" пустое");
    return false;}

    if(data.email != null && data.email.value.length < 6)
    {
    alert("слишком короткий "E-Mail"");
    return false;}

    if(!(/^w+[-_.]*w+@w+-?w+.{2,4}$/.test(data.email.value)))
    {
    alert("Введите правильный E-Mail адрес");
    return false;}

    /* контактный телефон */
    if(data.phone != null && data.phone.value.length == 0)
    {
    alert("поле "Контактный телефон" пустое");
    return false;}

    if(data.phone != null && data.phone.value.length < 5)
    {
    alert("поле "Контактный телефон" должно содержать минимум пять символов");
    return false;}

    if(!(/^+z/.test(data.phone.value+"z")))
    {
    alert(""Контактный телефон" указан неверно");
    return false;}

    /* делаем чтобы поле сумма было равно определенному числу */
    number = document.getElementById("summa");
    if (number.value !== "20")
    {
    alert(""Сумма" не введена или введена неверно");
    return false;}
    } Подгружаем данный файл в наш документ, помещаем его между тегами head:

    Вот и готова наша проверка. Теперь после того, как все данные введены отправляем нашу форму нам на почту.
    В файл index.php пишем php-код:



    Рекомендуем почитать

    Наверх