Часто при регистрации на различных сайтах пользователя просят оставить свой E-mail адрес. Чтобы в дальнейшем не произошло никаких недоразумений, информацию о пользователе следует проверять перед отправкой на сервер. Конечно, все поля проверять необязательно, но те данные, которые достаточно жёстко определены и ограничены стандартами, необходимо проверить. В частности к ним относятся телефонные номера, адреса электронной почты и номера ICQ.
Учитывая тот факт, что формат таких данных может быть достаточно разнообразным, следует принимать во внимание все возможные варианты.
В этой статье мы ограничимся рассмотрением форматов E-mail адресов и номеров ICQ.
Форматы E-mail адресов
E-mail адрес — это специальный идентификатор, состоящий из строки символов, называемой локальной частью (local-part), за которой следует знак @
(at-sign, со ASCII-значением 64), а затем расположена строка с именем домена (domain). То есть идентификатор имеет вид: local-part@domain
.
Локальная часть — это либо строка в кавычках, либо строка, которая может быть разделена точками. Если строка может быть представлена во второй форме, то рекомендуется использовать именно эту форму, а не строку в кавычках.
Локальная часть может содержать следующие символы:
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 .!#$%&"*+/-=?^_`{|}~
Локальная часть отделена от доменной с помощью символа @
. Доменная часть идентификатора указывает хост, на который должно быть доставлено письмо.
В доменной части разрешено использование следующих символов:
ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 .-
Локальная часть зависит от доменной, в том смысле, что её формат может меняться в зависимости от политики отдельного хоста, используемого в качестве доменной части почтового ящика.
Форматы ICQ-номеров
Форматы представления ICQ-номеров менее разнообразны, чем E-mail адреса.
В состав номера ICQ может входить от 5 до 9 цифр. Часто используется представление в формате: XXX-XXX-XXX
. Однако, такой формат не универсален, так как, например, 7-значные номера не могут быть представлены в нём однозначно. Поэтому рекомендуется использование формата: XXXXXXXXX
(с возможным количеством знаков от 5 до 9).
Разнообразие по количеству знаков в номере ICQ обусловлено тем, что сначала, в момент появления сервиса пользователей регистрировали под 6-значными номерами. Потом когда количества номеров стало не хватать, количество знаков приходилось увеличивать, и на сегодняшний день пользователи могут зарегистрироваться только под 9-значными номерами. Однако, существуют сайты, которые продают 6-, 7-, 8-значные номера.
Проверка полей форм с помощью регулярных выражений JavaScript
Наиболее удобным способом проверки введенных данных является использование регулярных выражений.
Регулярное выражение — это шаблон, которому сопоставляются введённые данные (строковые данные). Они называются регулярными, так как могут использоваться для сопоставления ограниченному набору данных (заранее определенного формата).
Если вы хотите узнать больше об использовании регулярных выражений в JavaScript, советуем обратиться к книге Томаса Пауэлла и Фрица Шнайдера "Полный справочник по JavaScript: Второе издание". В книге подробно описаны возможности языка JavaScript для работы с регулярными выражениями.
Проверка ICQ-номеров
Сперва необходимо создать регулярное выражение, которое бы соответствовало формату ICQ-номера. В случае с форматом XXXXXXXXX
, регулярное выражение будет таким:
var pattern = /^\d{5,9}$/;
В JavaScript регулярные выражения ограничиваются символами /
с двух сторон. Конструкция \d{5,9}
означает, что строка должна состоять из цифр (\d
) и содержать от 5 до 9 знаков ({5,9}
). Символы ^
и $
говорят нам о том, что строка полностью соответствует этому шаблону, нет ни единого символа до и после него.
Таким образом, шаблону будут соответствовать строки, например, такого вида: 20045697
, 102145
, 48574
, 123456789
. Шаблону не соответствуют строки: 5422
, 1234567890
. Строки содержащие символы, отличные от цифровых шаблону также не соответствуют. Мы не рассматриваем формат XXX-XXX-XXX
, так как он не универсален. Пользователя всегда следует уведомлять о том, в каком формате необходимо ввести данные.
Проверка E-mail адресов
Составление регулярного выражения для проверки E-mail адресов является более трудной задачей. Формат E-mail адресов был описан выше, здесь мы укажем лишь регулярное выражение:
var pattern = /^(([a-zA-Z0-9]|[!#$%\*\/\?\|^\{\}`~&'\+=-_])+\.)* ([a-zA-Z0-9]|[!#$%\*\/\?\|^\{\}`~&'\+=-_])+@ ([a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]+$/;
Регулярное выражение записывается на одной строке, без переносов. Строка означает, что сначала могут располагаться 0 или более символов локальной части, отличных от точки, с последующей точкой, затем располагаются 1 или более символов локальной части, отличных от точки, затем символ @
, потом доменная часть, соответствующего формата.
Для проверки соответствия шаблону в JavaScript используется функция test
, которая возвращает true
, если строка соответствует шаблону и false
в противоположном случае.
var pattern = /^(([a-zA-Z0-9]|[!#$%\*\/\?\|^\{\}`~&'\+=-_])+\.)* ([a-zA-Z0-9]|[!#$%\*\/\?\|^\{\}`~&'\+=-_])+@ ([a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]+$/; pattern.test("adam.trent.@mail.stan.com"); // возвратит false pattern.test("adam-trent_sponsor12@mail.stan.com"); // возвратит true pattern.test("adam-trent?sponsor+12@mail.stan.com"); // возвратит true pattern.test("adam-trent..sponsor@mail.stan.com"); // возвратит false
Выводы
Для обеспечения удобства заполнения форм, а также корректности введенных данных необходимо правильно определять допустимые для ввода форматы данных. Также нужно информировать пользователя о том, в каком формате следует вводить информацию.
В плане реализации проверки форм наиболее удачным является использование регулярных выражений, которые позволяют подобрать шаблон в подавляющем большинстве случаев.
В статье использованы материалы документа RFC 2822 Internet Message Format [8].
Комментарии
Приветствую, подскажите как связаться с админом сайта? Писал на емайл не ответили.
За статью огромная благодарность, все по делу.
а еще посты на эту тему будут в будущем?
А какой вопрос конкретно Вас интересует?
Мда, хотелось бы ещё почитать на эту тему.
Автору спасибо.
Автору спасибо.
Интересная статья, спасибо.