Что такое валидация номера телефона

Нужно ли валидировать номера телефонов в формах обратной связи?

Задача интернет-бизнеса — заполучить клиента и довести продажу до логического завершения (получения оплаты)

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

Владимир Завертайлов

CEO & Founder студии «Сибирикс»

— Еще в 2005, работая над проектами для бостонского заказчика, я отметил для себя, что телефонные номера не нужно проверять на соответствие числовому формату. Просто потому, что телефон его компании был PURA VIDA («чистая жизнь» по-испански). Причем в США подобные телефоны были не только у компаний, но и у обычных бизнесменов. Против такого валидация бессильна, и я настойчиво продвигал идею того, что не надо парить людей вбиванием телефонного номера по образцу (коммуникацию на стороне компании всё равно будет выстраивать человек, а он разберется). И четкое требование к формату нужно только в том случае, если звонить будет робот (ну, или отправлять SMS).

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

Проверка телефонного номера на соответствие определенному формату (она же валидация) — момент очень спорный.

Выдвигаем гипотезу

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

Определяем базу исследования

Проведем небольшой срез отечественного рынка. За основу берем статистику «Коммерсанта»: «ТОП-100 российских интернет-магазинов» за 2011, 2012 и 2013 годы. Цифры в рейтинге критикуют, однако, нас не интересует точность расчетов и объемы оборота — нас занимает только форма обратной связи в топовых магазинах. В то же время, мы не утверждаем, что валидатор телефонного номера либо его отсутствие оказывает решающее влияние на прибыльность бизнеса :). Рейтинг просто служит базой для проверки гипотезы.

Приступаем к исследованию

Шаг 1
В качестве экспериментального телефонного номера, который мы будем пытаться ввести во все формы, возьмем «крайний случай» — телефон технической поддержки Apple. Он выглядит как 1−800-MY-APPLE (это его официальный формат). В Америке такие номера — в порядке вещей, там исторически принято заменять цифры буквами для удобства запоминания. У нас такого нестандартного «монстра» ни один валидатор не пропустит. Если он есть, конечно.

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

Мы рассмотрим 50 интернет-магазинов из верхней части рейтинга. На наш взгляд, это достаточно репрезентативная выборка (тем более, что в верхней части топа находятся наиболее успешные онлайн-ритейлеры).

Шаг 2
Проверяем интернет-магазины на присутствие формы обратной связи (или звонка). Получаем следующее распределение (в процентах):

В 2011 году доля магазинов, использующих какие-либо инструменты для обратной связи, кроме стандартной почты-ссылки, контактного телефона и скайпа, составляла 52%. В последующие годы их число существенно возросло и составило 70%. Мы не будем делать на основании этих процентов каких-либо серьезных выводов, потому что система оценки самого рейтинга довольно шаткая и меняется из года в год. Просто это дает нам возможность познакомиться поближе с формами и валидаторами там, где они есть (а они таки есть). Вперед!

Шаг 3
Теперь посмотрим, какой процент интернет-магазинов проводит проверку телефонного номера на соответствие формату, а какой — нет. База всё та же: 2011, 2012 и 2013 годы.

Соотношение примерно 1:5 в пользу форм, не проводящих валидацию телефона (20% проводят, 80% — нет). Если попробовать отслеживать динамику, то можно увидеть некоторое снижение количества телефонных валидаторов в 2013-ом году. Это (а также общий невысокий процент форм с валидацией телефона) можно объяснить следующим:

  • Бизнес повышает внимание к удобству интерфейсов. Пользователя не принуждают вписывать свой телефон (это, всё же, более «личный» контакт, нежели электронная почта). Например, изящное решение с телефонным полем на S7 (онлайн-продажа авиабилетов):

Если пользователь введет телефон, то это будет его осознанным шагом. Что гарантирует его достоверность.

  • Бизнес находит другие инструменты для общения с клиентом.

Почему формы обратной связи до сих пор сохраняются? Отчасти сказывается шаблонность мышления, отчасти — желание разгрузить службу поддержки и колл-центры. И, безусловно, кому-то удобнее обратиться сейчас, а получить ответ или обратный звонок позднее. Однако и на существующих формах есть, что улучшить. Те самые типичные ошибки, которые почему-то до сих пор встречаются:

  • Вывод уведомления о неверном формате после того, как пользователь отправил форму.
  • Капча — зло.
  • Сброс всей формы после того, как валидатор не пропустил значение в одном из полей.
  • Много обязательных полей. Больше полей — меньше пользователей, дошедших до отправки заполненной формы.
  • Жесткая либо некорректная валидация телефонного номера.
  • Не самый удачный способ вывода оповещений о неверно заполненных полях (например, на сайте у Эльдорадо):

Половина этих проблем решается отказом от валидации телефона. Всегда можно оставить один контакт обязательным (почта), а другой предложить заполнить по желанию и в том формате, в каком это удобно пользователю. Либо вообще сделать одно поле «контакты» для всего. Если пользователь заинтересован в связи, то он укажет самый удобный для себя контакт и сделает это корректно. Формы обратной связи — сами по себе архаичны. Создавать дополнительные трудности в виде валидаторов — просто недопустимо для бизнеса «с человеческим лицом».

Бонус-загадка
: кому будет удобно это самое «удобное для вас время»? ;)

Простейший способ валидации телефонных номеров на сайтах

28 July 2017, 18:47 MSK

Ещё одна раздражающая проблема многих сайтов — это когда сайт заставляет вводить тебя телефонный номер в понятном ЕМУ формате. Часто разработчики таких сайтов впридачу не удосуживаются сообщить пользователю, в каком формате сайт хочет видеть номер. Совсем клиника — когда ты видишь голое поле ввода номера, вводишь номер, жмёшь «Отправить» и получаешь сообщение типа «Телефон введён неправильно». Блин, а как правильно-то? И начинаешь перебирать разные форматы…

Сегодня рассмотрим простой способ валидации (проверки правильности ввода) телефонных номеров при условии того, что все посетители сайта — из России (или Казахстана). Российские номера телефонов начинаются с +7 и имеют далее 10 цифр. При этом, все люди привыкли вводить телефонные номера по-разному. Кто-то пишет

+79219710296,

кто-то

+7 921 971 02 96,

кто-то ставит скобки и тире:

+7 (921) 971-02-96,

кто-то пишет через восьмёрку: 89219710296, кто-то пишет просто 10 цифр: 921 971 02 96, ну и так далее. В нашем способе проверки все эти примеры будут считаться валидными, а на выходе мы будем иметь телефон в едином формате +7xxxxxxxxxx для удобного хранения номера в базе данных.

Код PHP-функции проверки телефонного номера:

function validate_russian_phone_number($tel)
{
    $tel = trim((string)$tel);
    if (!$tel) return false;
    $tel = preg_replace('#[^0-9+]+#uis', '', $tel);
    if (!preg_match('#^(?:\+?7|8|)(.*?)$#uis', $tel, $m)) return false;
    $tel = '+7' . preg_replace('#[^0-9]+#uis', '', $m[1]);
    if (!preg_match('#^\+7[0-9]{10}$#uis', $tel, $m)) return false;
    return $tel;
}

Функция принимает на входе строку с телефонным номером в произвольном формате, а возвращает либо телефонный номер в формате +7xxxxxxxxxx, либо false в случае, если номер не прошёл проверку (и об этом следует сообщить пользователю).

Спасибо за внимание. Делайте удобные сайты!

Валидация телефона на js

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

Телеграм-канал serblog.ru

Демо

Валидация номера телефона на JS

Самое основное в этом деле — регулярное выражение (regex), которое, к счастью, не нужно придумывать самому, а просто взять готовое и внедрить. Сразу скажу, что данная регулярка проверяет российские номера телефонов. Первая конструкция, которую мы рассмотрим, выглядит так:

1
2
3
4
5
6
7
8
let regex = /^(+7|7|8)?[s-]?(?[489][0-9]{2})?[s-]?[0-9]{3}[s-]?[0-9]{2}[s-]?[0-9]{2}$/;
let phone = '89000000000';
// дальше идет проверка на соответствие выражению
if(!regex.test(phone){
console.log('Не соответствует');
}else{
console.log('Соответствует');
}

То же самое можно записать в функцию валидации и вызывать ее где угодно в коде.

1
2
3
4
5
6
7
8
9
10
11
12
function validatePhone(phone){
 let regex = /^(+7|7|8)?[s-]?(?[489][0-9]{2})?[s-]?[0-9]{3}[s-]?[0-9]{2}[s-]?[0-9]{2}$/;
 return regex.test(phone);
}
// Вызов функции
let phone = '89000000000';
 
if (!validatePhone(phone)){
  console.log('Не соответствует');
}else{
  console.log('Соответствует');
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
89000000000
+79000000000
8-900-000-00-00
+7-900-000-00-00
8(900)0000000
8(900)000 00 00
+7 (900) 000 00 00
8(900)-000-00-00
+7(900)-000-00-00
+7(900)000-00-00
8 900 000 00 00
+7 900 000 00 00
8-(900) 000 00 00
+7-(900) 000 00 00
8-(900)-000-00-00
+7-(900)-000-00-00
7(999)999 99 99
79000000000
7-900-000-00-00
7-(900)-000-00-00
7(900)-000-00-00
7(900) 000 00 00
7 (900)-000-00-00
7 (900) 000 00 00
7 900 000 00 00
8000000000
9000000000
800 000 00 00
900 000 00 00
800-000-00-00
900-000-00-00
(800)-000-00-00
(900)-000-00-00

Валидация телефона на jQuery

Здесь все в точности то же самое, но пройдемся по HTML коду и разберем по полочкам все элементы, чтобы было более понятно. Допустим у нас есть вот такой инпут:

<input type="tel" class="input"/>

Затем пишем jQuery код.

1
2
3
4
5
6
7
let phone = $('.input').val(); // Получаем значение input
let regex = /^(+7|7|8)?[s-]?(?[489][0-9]{2})?[s-]?[0-9]{3}[s-]?[0-9]{2}[s-]?[0-9]{2}$/;
if(!regex.test(phone){
console.log('Не соответствует');
}else{
console.log('Соответствует');
}

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

Как мы уже говорили ранее,довольно сложно предоставить универсальное решение для проверки телефонных номеров на стороне клиента.Так что же мы можем сделать? Давайте рассмотрим некоторые варианты.

Предупреждение: проверка формы HTML не заменяет серверные сценарии, которые проверяют, что введенные данные находятся в правильном формате, прежде чем они будут разрешены в базе данных. Для кого-то слишком легко внести изменения в HTML, которые позволят им обойти проверку или полностью удалить ее. Также есть возможность полностью обойти ваш HTML и отправить данные прямо на ваш сервер. Если ваш серверный код не может проверить данные, которые он получает, может случиться катастрофа, когда в вашу базу данных будут введены неправильно отформатированные данные (или данные, которые слишком большие, неправильного типа и т. Д.).

Вы можете сделать так, чтобы пустой ввод был недействительным и не передавался на сервер с использованием required атрибута. Например, воспользуемся этим HTML:

<form>
  <div>
    <label for="telNo">Enter a telephone number (required): </label>
    <input id="telNo" name="telNo" type="tel" required>
    <span class="validity"></span>
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

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

div {
  margin-bottom: 10px;
  position: relative;
}

input[type="number"] {
  width: 100px;
}

input + span {
  padding-right: 30px;
}

input:invalid + span::after {
  position: absolute;
  content: "✖";
  padding-left: 5px;
  color: #8b0000;
}

input:valid + span::after {
  position: absolute;
  content: "✓";
  padding-left: 5px;
  color: #009000;
}

Выход выглядит так:

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

В этом примере мы будем использовать тот же CSS,что и раньше,но наш HTML изменен,чтобы выглядеть так:

<form>
  <div>
    <label for="telNo">Enter a telephone number (in the form xxx-xxx-xxxx): </label>
    <input id="telNo" name="telNo" type="tel" required
           pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}">
    <span class="validity"></span>
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

Обратите внимание,что введенное значение считается недействительным,если не совпадает с шаблоном xxx-xxx-xxx;например,41-323-421 не будет принято.Также не будет принят номер 800-MDN-ROCKS.Однако 865-555-6502 будет принят.Этот конкретный шаблон,очевидно,полезен только для определенных локалей-в реальном приложении вам,вероятно,придется варьировать используемый шаблон в зависимости от локали пользователя.

В этом примере мы представляем простой интерфейс с элементом <select> , который позволяет пользователю выбирать, в какой стране он находится, и набором элементов <input type="tel"> , позволяющих им вводить каждую часть своего номера телефона. ; нет причин, по которым у вас не может быть нескольких входов tel .

Каждый ввод имеет атрибут- placeholder , чтобы показать зрячим пользователям подсказку о том, что в него вводить, pattern для принудительного ввода определенного количества символов для нужного раздела и атрибут aria-label , содержащий подсказку, которую нужно прочитать на экране. читатели пользователи о том, что в него входить.

<form>
  <div>
    <label for="country">Choose your country:</label>
    <select id="country" name="country">
      <option>UK</option>
      <option selected>US</option>
      <option>Germany</option>
    </select>
  </div>
  <div>
    <p>Enter your telephone number: </p>
    <span class="areaDiv">
      <input id="areaNo" name="areaNo" type="tel" required
             placeholder="Area code" pattern="[0-9]{3}"
             aria-label="Area code">
      <span class="validity"></span>
    </span>
    <span class="number1Div">
      <input id="number1" name="number1" type="tel" required
             placeholder="First part" pattern="[0-9]{3}"
             aria-label="First part of number">
      <span class="validity"></span>
    </span>
    <span class="number2Div">
      <input id="number2" name="number2" type="tel" required
             placeholder="Second part" pattern="[0-9]{4}"
             aria-label="Second part of number">
      <span class="validity"></span>
    </span>
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>

JavaScript относительно прост — он содержит обработчик события onchange , который при изменении значения <select> обновляет pattern элемента <input> , placeholder и метку aria-label в соответствии с форматом телефонных номеров в этой стране/территории. pattern placeholder aria-label

const selectElem = document.querySelector("select");
const inputElems = document.querySelectorAll("input");

selectElem.onchange = () => {
  for (let i = 0; i < inputElems.length; i++) {
    inputElems[i].value = "";
  }

  if (selectElem.value === "US") {
    inputElems[2].parentNode.style.display = "inline";

    inputElems[0].placeholder = "Area code";
    inputElems[0].pattern = "[0-9]{3}";

    inputElems[1].placeholder = "First part";
    inputElems[1].pattern = "[0-9]{3}";
    inputElems[1].setAttribute("aria-label","First part of number");

    inputElems[2].placeholder = "Second part";
    inputElems[2].pattern = "[0-9]{4}";
    inputElems[2].setAttribute("aria-label", "Second part of number");
  } else if (selectElem.value === "UK") {
    inputElems[2].parentNode.style.display = "none";

    inputElems[0].placeholder = "Area code";
    inputElems[0].pattern = "[0-9]{3,6}";

    inputElems[1].placeholder = "Local number";
    inputElems[1].pattern = "[0-9]{4,8}";
    inputElems[1].setAttribute("aria-label", "Local number");
  } else if (selectElem.value === "Germany") {
    inputElems[2].parentNode.style.display = "inline";

    inputElems[0].placeholder = "Area code";
    inputElems[0].pattern = "[0-9]{3,5}";

    inputElems[1].placeholder = "First part";
    inputElems[1].pattern = "[0-9]{2,4}";
    inputElems[1].setAttribute("aria-label","First part of number");

    inputElems[2].placeholder = "Second part";
    inputElems[2].pattern = "[0-9]{4}";
    inputElems[2].setAttribute("aria-label","Second part of number");
  }
}

Пример выглядит так:

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

Это заставляет вас задуматься,стоит ли идти на все эти проблемы на стороне клиента,когда вы можете просто позволить пользователю ввести свой номер в любом формате на стороне клиента,а затем проверить и дезинфицировать его на сервере.Но этот выбор за вами.

Введите валидный номер телефона: что это значит?

Угрожающее сообщение «Введен неверный номер телефона» или «Укажите валидный номер» встречается пользователям социальных сетей или развлекательных ресурсов. Регистрация в системе происходит по телефону, указывать адрес электронной почты совсем не обязательно. Что делать при появлении сообщения о невалидном номере, как устранить всплывающую ошибку, позволит определенная комбинация действий.

Что значит «валидный»?

В переводе с международного английского языка «Validity» — правильный, корректный. Система настойчиво требует «Введите валидный номер», а пользователь не понимает, как его действующий телефон может быть неправильным. Уведомление нужно понимать как «Введите корректный номер телефона».

При регистрации требуется правильный номер телефона

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

Как происходит идентификация по личному номеру телефона?

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

Пользователь задается вопросом о том, в каком формате нужно указать номер телефона. Внутри страны принято отображать телефонную последовательность с цифры 8. Сайт, работающий в международном формате, воспримет номер телефона 8-***-***-**-** как невалидный. Нужно указать цифровую последовательность, начинающуюся с +7.

Валидный номер телефона вводится в международном формате

Международный код страны может выставляться автоматически, требуется ввести только остальные цифры, следующие за +7 или 8. В некоторых случаях система правит номер пользователя на валидный самостоятельно.

Что делать, если номер введен правильно, а система выдает «невалидный»?

Когда владелец мобильного номера убежден в правильности ввода, следует произвести проверку.

Убедиться в рабочем состоянии сим-карты

Потребуется позвонить оператору, проверить баланс. Иногда поставщик связи блокирует телефон из-за отсутствия паспортных данных клиента. Система не примет номер, если на него не удается отправить смс-сообщение.

Перечитать введенные цифры

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

Обратить внимание на введенный код страны

Нужно набрать +7, а не 8, если система требует ввод номера телефона в международном формате. Последовательность цифр будет принята как правильная.

Убрать пробелы, тире, иные знаки

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

Убедиться в отсутствии технического сбоя

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

Сбой на сервере может выдавать ошибку о невалидности номера телефона

Заключение

Разобраться в понятии «валидность» несложно. При заполнении регистрационной формы нужно ответственно отнестись к вводу исходной информации о пользователе. Изменить номер телефона будет проблематично.

Зарегистрироваться на недействующую сим-карту практически невозможно. Система не принимает введенные комбинации из соображений безопасности.

Главная » База знаний » Введите валидный номер телефона: что это такое значит, как его ввести

Введите валидный номер телефона: что это такое значит, как его ввести

20.03.2020

5,174 Просмотры

«Номер введен неверно. Введите валидный номер телефона». Хоть раз сталкивались с таким пугающим предупреждением? Если да — то эта статья точно для вас!

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

Для чего это нужно? А все для нашей с вами безопасности. Ведь если вашу страницу в соцсети или e-mail взломают, это становится единственной возможностью подтвердить вашу личность.

И что же делать, если вы вводите номер (который точно ваш!), а он оказывается «невалидный»?


Для начала определимся с термином. Валидность – от англ. Validity, что значит верный, корректный. Т.е. валидный — это правильный номер.

В нашем случае валидность — это определенная последовательность допустимых символов. Допустимых — значит, никаких букв или знаков препинания, например, в нем быть не должно. Любой телефон можно записать десятком разных способов: с пробелами, со скобками, через тире, сплошной чередой цифр, в конце концов, с 8 или +7.

И на каком-либо сайте система может принимать номер только в определенном формате. Например, вы пишете 8ххх ххх хх хх и она воспринимает его как невалидный.

С точки зрения программы верен только один вариант: +7хххххххххх.


Чаще всего проблем не возникает: вам либо сразу в примере укажут верную форму ввода, либо программа просто не пропустит невалидный номер и сама откорректирует его.

Но что же делать, если этого не произошло и вас попросили ввести валидный номер?

Есть несколько вариантов:

  1. Для начала убедитесь, что он точно ваш и в настоящий момент находится в рабочем состоянии. Иначе SMS подтверждения на него прийти просто не смогут.


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

  2. Проверьте правильность введенного номера. Возможно, вы пропустили цифру или наоборот, приписали лишнего.
  3. Правильно вводите код страны. Часто возникает путаница, как писать: 8 или +7? Так вот, правильно +7.
  4. Старайтесь не мудрить и пишите без всяких символов и пробелов. Пример: +71234567890. Такой номер, скорее всего, программа сочтет валидным.
  5. Если вы уверены, что все введено верно, возможно, сбой произошел на сервере. Попробуйте войти через какое-то время.

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

Загрузка…

  • Валидация полей формы с помощью HTML

  • Поле обязательно к заполнению

  • Проверка ввода Email

  • Проверка ввода телефона

  • Проверка по количеству символов

  • Проверка ввода только букв

  • Проверка ввода только цифр

  • Валидация полей формы с помощью JavaScript

  • Проверка формата E-mail

  • Проверка формата телефона

  • Валидация полей формы с помощью плагина jQuery Validation Plugin

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

Валидация полей формы с помощью HTML

Самый простой, но не самый эффективный способ — это валидация полей формы через стандартные свойства полей HTML.

Поле обязательно к заполнению

<input type="text" name="name" required>

Проверка ввода Email

<input name="email" required pattern="[email protected][a-z]+.[a-z]+">

Проверка ввода телефона

<input type="tel" name="phone" pattern="^((8|+7)[- ]?)?((?d{3})?[- ]?)?[d- ]{7,10}$" required />

Проверка по количеству символов

<input type="text" name="message" minlength="30" maxlength="2000" />

Проверка ввода только букв

<input type="text" name="message" pattern="[A-zА-яЁё]" />

Проверка ввода только цифр

<input type="text" name="message" pattern="[0-9]" />

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

Валидация полей формы с помощью JavaScript

Наиболее сложный способ валидации на чистом JavaScript на примере простой формы обратной связи:

<form action="" name="callback" onsubmit="return(validate());">
	<input type = "text" name="name" placeholder="Имя"/><br>
	<input type = "text" name="lastname" placeholder="Фамилия" /><br>
	<input type = "text" name="email" placeholder="E-mail"/><br>
	<select name="topic">
		<option value="-1" selected>[Выберите тему обращения]</option>
		<option value="1">Техническая поддержка</option>
		<option value="2">Реклама</option>
		<option value="3">Сообщить об ошибке</option>
	</select>
<input type="submit" value="Отправить" />
</form>      

Обращаем внимание на то, что в свойствах формы указан параметр onsubmit=»return(validate());», что позволит выполнить функцию validate() перед отправкой формы. Теперь собственно сама функция проверки:

<script>
   <!--
      // Проверка заполненности полей формы.
      function validate() {
      
         if( document.callback.name.value == "" ) {
            alert( "Укажите имя" );
            document.callback.name.focus() ;
            return false;
         }
         if( document.callback.email.value == "" ) {
            alert( "Заполните Email" );
            document.callback.email.focus() ;
            return false;
         } 
           if( document.callback.lastname.value == "" ) {
            alert( "Укажите фамилию" );
            document.callback.lastname.focus() ;
            return false;
         }
         if( document.callback.topic.value == "-1" ) {
            alert( "Пожалуйста, выберите темы обращения" );
            return false;
         }
         return( true );
      }
   //-->
</script>

к содержанию ↑

Проверка формата E-mail

function ValidMail() {
    var re = /^[w-.][email protected][w-]+.[a-z]{2,4}$/i;
    var myMail = document.getElementById('email').value;
    var valid = re.test(myMail);
    if (valid) output = 'Адрес эл. почты введен правильно!';
    else output = 'Адрес электронной почты введен неправильно!';
    document.getElementById('message').innerHTML = output;
    return valid;
}

Проверка формата телефона

function ValidPhone() {
    var re = /^d[d() -]{4,14}d$/;
    var myPhone = document.getElementById('phone').value;
    var valid = re.test(myPhone);
    if (valid) output = 'Номер телефона введен правильно!';
    else output = 'Номер телефона введен неправильно!';
    document.getElementById('message').innerHTML = document.getElementById('message').innerHTML+'<br />'+output;
    return valid;
}  

Валидация полей формы с помощью плагина jQuery Validation Plugin

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

Этот плагин позволяет легко проверять формы на стороне клиента, и предлагает множество вариантов настроек. Для начала подключаем jQuery и jQuery Validation.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>

Затем простенькая форма для примера:


<form action="" name="callback" >
	<input type = "text" name="name" placeholder="Имя"/><br>
	<input type = "text" name="lastname" placeholder="Фамилия" /><br>
	<input type = "text" name="email" placeholder="E-mail"/><br>
	<select name="topic">
		<option value="-1" selected>[Выберите тему обращения]</option>
		<option value="1">Техническая поддержка</option>
		<option value="2">Реклама</option>
		<option value="3">Сообщить об ошибке</option>
	</select>
<input type="submit" value="Отправить" />
</form>      

Теперь давайте запустим проверку валидации при попытке отправить форму:

$('form[name="callback"]').validate({
  rules: {
    name: 'required',
    lastname: 'required',
    email: {
      required: true,
      email: true,
    },
    topic: 'required',
  },
  messages: {
    name: 'Укажите имя',
    lastname: 'Укажите фамилию',
    email: 'Укажите правильный E-mail',
    topic: 'Выберите тему обращения'
  },
  submitHandler: function(form) {
    form.submit();
  }
});

Как видно, после проверки формы на валидацию, происходит её отправка методом form.submit();

Проверка адреса email и номера телефона на javascript

Предоставляя пользователю возможность заполнения полей на сайте, следует проверять введенные данные на валидность. Это позволит предупредить пользователя о случайных ошибках, а так же даст дополнительную защиту от спама. Ярким примером является форма обратной связи, обязательными полями которой часто бывают email и телефон. Займемся их проверкой на правильность заполнения с помощью javascript.

Информация лучше воспринимается на примерах, поэтому посмотрим готовую форму в действии:

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

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

Валидность адреса электронной почты

Рассмотрим адрес электронной почты (test@mail.ru). Вот его обязательные части:

  • Название (test) — один или много символов;
  • Знак собаки (@);
  • Доменное имя почтового сервера (mail) — один или много символов;
  • Точка (.);
  • Доменное имя первого уровня (ru) от двух до пяти букв.

Составим регулярное выражение для наших требований:

/^[w-.]+@[w-]+.[a-z]{2,4}$/i

Разберём правило по частям:

  1. Регулярное выражение должно открываться и закрываться символами «/». После закрывающегося символа можно указать директиву. В нашем случае такой директивной является «i», которая отключает проверку вводимых букв на регистр. То есть, становится не важно, ввели «test@mail.ru» или «Test@Mail.RU».
  2. Знаки «^» и «$» обозначают начало и конец проверяемой строки. Если их убрать, то правило вернет положительный результат даже если в начале или конце электронного адреса поставить запрещенные знаки. То есть, при вводе «%:&test@mail.ru#6&» функция проверки вернет положительный результат, так как в строке имеется последовательность символов, удовлетворяющая нашему правилу. Для исключения такой возможности указываем, что правило должно применяться ко всей строке, а не к её части.
  3. Блок «[w-.]+» отвечает за проверку названия ящика. В квадратных скобках указываем разрешенные символы: «w» — все латинские буквы, цифры и знак подчеркивания. Так же рекомендую добавлять знак тире и точку «-.». «+» после квадратных скобок указывает на возможность повторения символов — один или много раз.
  4. Далее идет знак собаки и доменное имя почтового сервера — «@[w-]+». Здесь практически тоже самое что и в предыдущем блоке. Исключаем только из набора символов точку.
  5. Осталось прописать правило для проверки наличия точки и корректности доменного имени верхнего уровня (ru,com,info). «.[a-z]{2,4}». Для обозначения знака точки мы указываем её с обратным слешем «.» Без него она будет восприниматься зарезервированным символом регулярки, который обозначает возможность наличия на её месте любого символа.

    За точкой должно следовать доменное имя верхнего уровня. Это минимум 2 латинские буквы — «[a-z]{2,4}».

Разобранный пример немного упрощен для лучшего восприятия. У него есть недостаток — первым знаком в email не может быть тире или точка, но приведенное регулярное выражение этого не учитывает. Чтобы это исправить следует его немного поправить:

/^[w]{1}[w-.]*@[w-]+.[a-z]{2,4}$/i

Проверка валидности номера телефона в javascript

С номером телефона ситуация сложнее, так как номер можно ввести десятками способов:

8 999 1234567
8 (999) 1234567
8 999 123-45-67
+7 (999) 123 45 67

Есть несколько выходов из ситуации:

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

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

/^[d+][d() -]{4,14}d$/

В правиле указываем что первый символ должен быть обязательно цифрой или плюсом «[d+]», а последний только цифрой — «d». В середине разрешаем использовать скобоки, пробел и знак дефиса — «[d() -]{4,14}», от 4 до 14 символов. Так как скобки и пробел являются зарезервированными элементами регулярных выражений, перед ними ставим обратный слеш.

Для любителей жестких шаблонов приведу пример проверки номера вида 8 (999) 123-45-64

/^[d]{1} ([d]{2,3}) [d]{2,3}-[d]{2,3}-[d]{2,3}$/

Исходный код примера: html и javascript

Это полный код тестовой странички, на которой я использовал форму и js скрипты для отладки правил из этой статьи. Можете скопировать его и протестировать у себя на компьютере.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript">
 
function ValidMail() {
    var re = /^[w-.]+@[w-]+.[a-z]{2,4}$/i;
    var myMail = document.getElementById('email').value;
    var valid = re.test(myMail);
    if (valid) output = 'Адрес эл. почты введен правильно!';
    else output = 'Адрес электронной почты введен неправильно!';
    document.getElementById('message').innerHTML = output;
    return valid;
}
 
function ValidPhone() {
    var re = /^[d+][d() -]{4,14}d$/;
    var myPhone = document.getElementById('phone').value;
    var valid = re.test(myPhone);
    if (valid) output = 'Номер телефона введен правильно!';
    else output = 'Номер телефона введен неправильно!';
    document.getElementById('message').innerHTML = document.getElementById('message').innerHTML+'<br />'+output;
    return valid;
}  
 
</script>

</head>

<body>
<p id="message" >Пожалуйста, заполните все поля формы!</p> 
E-mail: <input id="email" name="email" type="text" size="20" /><br /> 
Телефон: <input id="phone" name="phone" type="text" size="20" /><br /> 
<input name="button" type="submit" value="Проверить" onClick="ValidMail(); ValidPhone();" />
</body>

</html>

Это демонстрационная версия. В случае с формой обратной связи нам следует проводить проверку полей не при нажатии на кнопку, а при попытке отправить её:

<form action="/feedback/" method="post" onsubmit="return (ValidMail()&&ValidPhone())">

В этом случае форма отправится только если обе функции вернут значение «true».

Понравилась статья? Поделить с друзьями:
  • Что такое бомбер на номер телефона и как его отключить
  • Что тупая что ли номер телефона
  • Что такое белый номер телефона
  • Что такое электронный номер телефона
  • Что такое частный номер телефона