Ошибка невалидные данные

Просмотров 8.8к. Опубликовано 19.12.2022
Обновлено 19.12.2022

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

В этой статье рассмотрим, что такое валидность, какие могут быть ошибки в HTML-разметке и как их устранить.

Содержание

  1. Что такое HTML-ошибка валидации и зачем она нужна
  2. Чем опасны ошибки в разметке
  3. Как проверить ошибки валидации
  4. Предупреждения
  5. Ошибки
  6. Пример прохождения валидации для страницы сайта
  7. Как исправить ошибку валидации
  8. Плагины для браузеров, которые помогут найти ошибки в коде
  9. Коротко о главном

Что такое HTML-ошибка валидации и зачем она нужна

Под понятием  “валидация” подразумевается процесс онлайн-проверки HTML-кода страницы на соответствие стандартам w3c. Эти стандарты были разработаны Организацией всемирной паутины и стандартов качества разметки. Сама организация продвигает идею унификации сайтов по HTML-коду — чтобы каждому пользователю, вне зависимости от браузера или устройства, было удобно использовать ресурс.

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

Чем опасны ошибки в разметке

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

К наиболее распространённым последствиям ошибок в коде HTML-разметки также относят сбои в нормальной работе сайта и помехи в продвижении ресурса в поисковых системах.

Рассмотрим несколько примеров, как ошибки могут проявляться при работе:

  • Медленно подгружается страница 

Согласно исследованию Unbounce, более четверти пользователей покидают страницу, если её загрузка занимает более 3 секунд, ещё треть  уходит после 6 секунд;

  • Не видна часть текстовых, фото и видео-блоков 

Эта проблема делает контент для пользователей неинформативным, поэтому они в большинстве случаев уходят со страницы, не досмотрев её до конца;

  • Страница может остаться не проиндексированной

Если поисковый робот распознает недочёт в разметке, он может пропустить страницу и прервать её размещение в поисковых системах;

  • Разное отображение страниц на разных устройствах

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

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

Как проверить ошибки валидации

Владельцы ресурсов используют 2 способа онлайн-проверки сайтов на наличие ошибок — технический аудит или использование валидаторов. 

Первый случай подходит для серьёзных проблем и масштабных сайтов. Валидаторами же пользуются ежедневно. Наиболее популярный — сервис The W3C Markup Validation Service. Он сканирует сайт и сравнивает код на соответствие стандартам W3C. Валидатор выдаёт 2 типа несоответствий разметки стандартам W3C: предупреждения и ошибки. 

Давайте рассмотрим каждый из типов чуть подробнее.

Предупреждения

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

Тем не менее, предупреждения всё равно нужно устранять, так как из-за них сайт может работать медленнее — например, по сравнению с конкурентами с такими же сайтами.

Примером предупреждения может быть указание на отсутствие тега alt у изображения. 

Ошибки

Ошибки  —  это те проблемы, которые требуют обязательного устранения. 

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

Распространённым примером ошибки может быть отсутствие тега <!DOCTYPE html> в начале страницы, который помогает информации преобразоваться в разметку. 

Пример прохождения валидации для страницы сайта

Рассмотрим процесс валидации на примере сайта avavax.ru, который создали на WordPress.

пример ошибки валидации

В результате проверки валидатор выдал 17 замечаний. После анализа отчета их можно свести к 3 основным:

  1. атрибут ‘text/javascript’ не требуется при подключении скрипта;
  2. атрибут ‘text/css’ не требуется при подключении стиля;
  3. у одного из элементов section нет внутри заголовка h1-h6.

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

Решить проблемы с предупреждениями для стилей и скриптов можно через добавление кода в файл темы function.php.

Добавление кода в файл

Для этого на хук wp_loaded нужно повесить функцию output_buffer_start(), которая загрузит весь генерируемый код html в буфер. При выводе в буфер вызывается функция output_callback($tag), которая просматривает все теги, находит нежелательные атрибуты с помощью регулярных выражений и заменяет их пробелами. Затем на хук ‘shutdown вешается функция output_buffer_end(), которая возвращает обработанное содержимое буфера.

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

  1. Добавить заголовок в код:  <h3>Обо мне</h3>

Отключить отображение заголовка:

1 #about h3 {
2 display: none;
3 }

После этой части заголовок будет в коде, но валидатор его увидит, а посетитель — нет. 

За 3 действия удалось убрать все предупреждения, чтобы качество кода устроило валидатор. Это подтверждается зелёной строкой с надписью: “Document checking completed. No errors or warnings to show”.

Как исправить ошибку валидации

Всё зависит от того, какими техническими знаниями обладает владелец ресурса. Он может сделать это сам, вручную. Делать это нужно постепенно, разбирая ошибку за ошибкой. Но нужно понимать, что если при проверке валидатором было выявлено 100 проблем — все 100 нужно обязательно решить. 

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

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

Плагины для браузеров, которые помогут найти ошибки в коде

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

Для каждого браузера есть свой адаптивный плагин:

  • HTML Validator для браузера Firefox;
  • HTML Validator for Chrome;
  • HTML5 Editor для Opera.

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

Коротко о главном

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

Проверку ресурса можно проводить тремя путями: валидаторами, специалистам полномасштабного аудита и плагинами в браузере. В большинстве случаев валидатор — самое удобное и быстрое решение для поиска проблем. С его помощью можно выявить 2 типа проблем с разметкой — предупреждения и ошибки. 

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

Даже у крупных сайтов с миллионной аудиторией, например, Яндекс.Дзен или ВКонтакте, есть проблемы с кодом. Но комплексный подход к решению проблем помогает устранять серьёзные моменты своевременно. Нужно развивать сайт всесторонне, чтобы получить результат от его существования и поддержки. Если самостоятельно разобраться с проблемами не получается, не стоит “доламывать” — лучше обратиться за помощью к профессионалам, например, агентствам по веб-аудиту. 


Просмотр полной версии : Введены невалидные данные…


При попытке создать новый раздел, выдает мне «Введены невалидные данные». Что это значит, и как с этим справиться?


Nethouse

06.03.2013, 15:27

При попытке создать новый раздел, выдает мне «Введены невалидные данные». Что это значит, и как с этим справиться?
Пришлите скриншот, пож-та.


http://nethouse.ru/forum/showthread.php/2116-Не-работает-страница-с-заказами
подобная ошибка со скриншотами



дайте доступ к ПК, нужно проверить http://goo.gl/odS5k


sklyarov777

19.04.2013, 13:41

При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». Что это значит, и как с этим справиться?


Nethouse

19.04.2013, 14:09

При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». Что это значит, и как с этим справиться?
Адрес сайта?


Ольга&Ярослав

25.04.2013, 20:52

При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». как с этим справиться? Адрес сайта domasuper.ru


Ольга&Ярослав

26.04.2013, 09:18

Уважаемые администраторы Nethouse помогите исправить ошибку!!!
При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». как с этим справиться? Адрес сайта domasuper.ru


Nethouse

26.04.2013, 12:57

Уважаемые администраторы Nethouse помогите исправить ошибку!!!
При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». как с этим справиться? Адрес сайта domasuper.ru
Попробуйте сейчас, должно работать.


Ольга&Ярослав

26.04.2013, 14:26

Попробуйте сейчас, должно работать.
не работает


Nethouse

26.04.2013, 17:52

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


romangutang

21.05.2013, 13:36

Аналогично: «невалидные данные».
Загружал каталог CSV файлом, сейчас добавляю фото и параметр товара, после сохранения выдает ошибку «невалидные данные» но фото сохраняется

Как исправить?

сайт http://pododezhdoy.nethouse.ru/

1228


Аналогично: «невалидные данные».
Загружал каталог CSV файлом, сейчас добавляю фото и параметр товара, после сохранения выдает ошибку «невалидные данные» но фото сохраняется

Как исправить?

сайт http://pododezhdoy.nethouse.ru/

1228а вы случайно текст никакой не добавляете?


Valeriya

28.05.2013, 15:25

Здравствуйте! Сайт www.boutiqueforyou.net при редактировании товара тоже надпись «введены невалидные данные»


значит где то ошибка, что именно редактируете, после чего получаете данную ошибку?


Valeriya

28.05.2013, 15:57

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


редактирую товар..при любом изменении (цена, название) высвечивается эта надпись. когда какая то конкретная ошибка, то она обычно выводится в красном поле.сейчас этого нет, только надписьпараметр товара у вас есть? ссылку на карточку товара укажете?


Valeriya

28.05.2013, 16:21

да,параметры есть, но раньше они тоже были и проблем не возникало
http://boutiqueforyou.net/products/3084812


да,параметры есть, но раньше они тоже были и проблем не возникало
http://boutiqueforyou.net/products/3084812уменьшите количество фото и количество параметров в номере модели


Valeriya

28.05.2013, 23:14

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



Valeriya

29.05.2013, 01:39

спасибо, мне не пришлось уменьшать в половину..вернее,совсем не пришлось уменьшать, пару хитрых шагов и все получилось,как надо)


Vital314

22.07.2013, 14:18

Здравствуйте! При добавлении раздела в каталог товара, не загружается фото и не сохраняет новый раздел! Пишет «Введены невалидные данные» Помогите! Сайт http://kisonki-murisenki.nethouse.ru1709


Здравствуйте! При добавлении раздела в каталог товара, не загружается фото и не сохраняет новый раздел! Пишет «Введены невалидные данные» Помогите! Сайт http://kisonki-murisenki.nethouse.ru1709
какие вносите изменения, текст копируете от куда то? конкретнее, и ссылку на товар укажите, если редактируете.
попробуйте сделать следующее http://nethouse.ru/about/instructions/u_menya_nichego_ne_rabotaet


Тоже самое — при добавлении товара пишет — «введены невалидные данные» фото всего одно и исчезло окно с артикулом. Подскажите пожалуйста как исправить?2251


Тоже самое — при добавлении товара пишет — «введены невалидные данные» фото всего одно и исчезло окно с артикулом. Подскажите пожалуйста как исправить?2251
нужен доступ к ПК, что бы понять что не так выделаете http://nethouse.ru/forum/showthread.php/1930



необходимо было прочистить кэш ctrl+shift+del


Уважаемые администраторы Nethouse помогите исправить ошибку!!!
При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». как с этим справиться? Адрес сайта megamaxs.ru


Уважаемые администраторы Nethouse помогите исправить ошибку!!!
При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». как с этим справиться? Адрес сайта megamaxs.ruчитали сообщение выше?


При добавлении товара на сайте http://candic.nethouse.ua , пишет ошибку введены невалидные данные .
Помогите исправить ошибку .


При добавлении товара на сайте http://candic.nethouse.ua , пишет ошибку введены невалидные данные .
Помогите исправить ошибку .скриншот приложите сообщения об ошибке
какие данные вводите? где что меняете?


Добавляю товар , делаю это первый раз . 2287


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


Картинки удалили , но проблема осталась .


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


Текст скопировал с блокнота , картинки все убрал , но ошибку показывает .


http://nethouse.ru/forum/showthread.php/1930 дайте доступ к ПК


Добрый день, я не могу ввести данные в каталог товаров -вылазиет окно «невалидные данные»

Мой сайт http://trends-of-beauty.nethouse.ru/


Добрый день, я не могу ввести данные в каталог товаров -вылазиет окно «невалидные данные»

Мой сайт http://trends-of-beauty.nethouse.ru/
детальнее расскажите, что делаете, какое поле правите, скриншот приложите


2626

вставляю картинку, пишу название кол-во и цену
в любом разделе каталога выскакивает это окошко


2626

вставляю картинку, пишу название кол-во и цену
в любом разделе каталога выскакивает это окошко
так сложно понять
дайте доступ к ПК http://nethouse.ru/forum/showthread.php/1930


а какой у вас скайп или адресс? или в ЛС?


а какой у вас скайп или адресс? или в ЛС?читайте инструкцию, там все написано :)


2626

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


Mardarika

12.01.2014, 09:42

Добрый день!
При попытке заполнить каталог выдает «Введены невалидные данные», адрес сайта Flash-store.ru


Добрый день!
При попытке заполнить каталог выдает «Введены невалидные данные», адрес сайта Flash-store.ruОпишите полностью ситуацию, что вводите, в каком поле, скриншот приложите


Добрый день,завожу товар в интернет магазин, пишет введены «невалидные данные» http://krutoipodarok.nethouse.ru/


Добрый день,завожу товар в интернет магазин, пишет введены «невалидные данные» http://krutoipodarok.nethouse.ru/

Приложите скриншот пожалуйста


Добрый день! Что значит невалидные данные? добавляю товар в раздел заполнил все параметры цену указал, нажимаю сохранить и вылезает введены невалидные данные… что делать? и вообще что это означает?


Добрый день! Что значит невалидные данные? добавляю товар в раздел заполнил все параметры цену указал, нажимаю сохранить и вылезает введены невалидные данные… что делать? и вообще что это означает?

Скриншот приложите пожалуйста


Добрый день! Что значит невалидные данные? добавляю товар в раздел заполнил все параметры цену указал, нажимаю сохранить и вылезает введены невалидные данные… что делать? и вообще что это означает?


Добрый день! Что значит невалидные данные? добавляю товар в раздел заполнил все параметры цену указал, нажимаю сохранить и вылезает введены невалидные данные… что делать? и вообще что это означает?

Зачем вы дублируете сообщения?


4534 скриншот
http://proffi-floor.nethouse.ru/products/category/824957


4534 скриншот
http://proffi-floor.nethouse.ru/products/category/824957
Вы текст вставляли на страницу копированием?



4535
Попробуйте выделить текст и очистить форматирование, после сохранить



Доступ к ПК предоставьте http://nethouse.ru/forum/showthread.php/1930


TeamViewer 9 у меня такая прога есть не пойдет?


TeamViewer 9 у меня такая прога есть не пойдет?Нет, не подойдет.



и куда отправить код?В инструкции написано, читайте внимательно :)


При попытке настроить оплату мне выдает : введите валидный номер телефона. Пробовала разные варианты — не помогает. Мой номер +8 093 9898915. Как надо написать??


Как правильно написать номер телефона? Выдает, что невалидный, хотя я пишу как в образце +8 093 9898915


Как правильно написать номер телефона? Выдает, что невалидный, хотя я пишу как в образце +8 093 9898915Если вы хотите подключить онлайн платежи, то телефон нужно писать Российский, и магазин должен находиться на территории РФ. http://nethouse.ru/about/instructions/kto_mozhet_podklyuchit_onlajn_priem_platezhej
Следите за новостями (http://nethouse.ru/blog), планируются изменений в этом направлении.


anatolijj

26.07.2014, 15:30

хотел добавить прайс. пишет: ввели невалидные данные? что делать?


хотел добавить прайс. пишет: ввели невалидные данные? что делать?Какой прайс и куда вы хотите добавить? Скриншот страницы приложите, пожалуйста и адрес сайта укажите


При добавлении товара, а конкретно при его сохранении пишет «введены невалидные данные» ,помогите пожалуйста


При добавлении товара, а конкретно при его сохранении пишет «введены невалидные данные» ,помогите пожалуйстаАдрес сайта укажите в виде site.nethouse.ru, приложите скриншот с сообщением «введены невалидные данные»


elen1280

19.09.2014, 15:01

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


подскажите пожалуйста!при попытке ввести текст в раздел доставка,сначало писал невалидные данные,потом половину текста удалила,теперь пишет ошибка!повторите еще.
Можете приложить скриншот и указать адрес сайта вида site.nethouse.ru?
_


elen1280

19.09.2014, 19:06

Уважаемые администраторы Nethouse помогите исправить ошибку!!!
При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». как с этим справиться? Адрес сайта domasuper.ru
Попробуйте сейчас, должно работать.

СПАСИБО большое!уже сама потихоньку разобралась,оказывается нельзя ставить тире в текстах.


elen1280

19.09.2014, 19:07

извиняюсь не туда написала!сори!


Уважаемые администраторы Nethouse помогите исправить ошибку!!!
При попытке отредактировать цену и название товара , выдает мне «Введены невалидные данные». как с этим справиться? Адрес сайта domasuper.ru
Попробуйте сейчас, должно работать.

СПАСИБО большое!уже сама потихоньку разобралась,оказывается нельзя ставить тире в текстах.В другом браузере пробовали? или на другом ПК?


elen1280

19.09.2014, 20:38

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


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


Прошу помощи 2-й день не могу добавлять товар на сайт пишет ввели невалидные данные хотя делаю все как всегда ? адрес сайта www.vkadre5.ru У меня весь процесс работы остановился… Люди хотят видеть новый товар … Что с вашим сервисом и когда ошибка будет устранена ??


Прошу помощи 2-й день не могу добавлять товар на сайт пишет ввели невалидные данные хотя делаю все как всегда ? адрес сайта www.vkadre5.ru (http://www.vkadre5.ru) У меня весь процесс работы остановился… Люди хотят видеть новый товар … Что с вашим сервисом и когда ошибка будет устранена ??Пришлите логин и пароль от сайта в личку, проверю


Прошу помощи 2-й день не могу добавлять товар на сайт пишет ввели невалидные данные хотя делаю все как всегда ? адрес сайта www.vkadre5.ru (http://www.vkadre5.ru) У меня весь процесс работы остановился… Люди хотят видеть новый товар … Что с вашим сервисом и когда ошибка будет устранена ??Товар добавил без каких либо проблем http://vkadre5.nethouse.ru/products/14427517
Попробуйте добавить товар с другого пк, возможно проблема на вашем пк.


при изменении товара добавлении к нему еще параметров после сохранения пишет введены невалидные данные. что делать?7093


при изменении товара добавлении к нему еще параметров после сохранения пишет введены невалидные данные. что делать?7093


при изменении товара добавлении к нему еще параметров после сохранения пишет введены невалидные данные. что делать?7093

при изменении товара добавлении к нему еще параметров после сохранения пишет введены невалидные данные. что делать?7093
Проверьте, всели параметры введены и их корректность.
Сделайте скриншот полностью всей карточки товара и приложите к следующему сообщению


Смысл в том что нажимаю редактировать этот товар и в описание пишу просто одну букву и нажимаю сохрнаить он мне сразу выдает эту ошибку.


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



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



здравствуйте
у меня «введены невалидные данные»
http://fromfinland.nethouse.ru/products/category/919202


здравствуйте
у меня «введены невалидные данные»
http://fromfinland.nethouse.ru/products/category/919202Добрый день.
В какой карточке товара? Скриншот страницы с сообщением об ошибке приложите, пожалуйста.


Скриншот страницы , что это твкое????


Скриншот страницы , что это твкое????Пример скриншота страницы
8777


при сохранить новый товар


при сохранить новый товарСоздали тестовый товар http://fromfinland.nethouse.ru/products/17999594 без каких либо сложностей.
Какие данные вы размещаете в карточке товара и каким образом?


как обычно, подобное делала более 1000 раз8779


Все, спасибо, я поняла в чем дело


как обычно, подобное делала более 1000 раз8779
Поставьте здесь «0»
8780


в параметрах, в одной из позиций +- не было ничего, как это произошло не знаю, поставила ноль и все ОК


Добрый день. Хотела подключить эл. почту, появляется «Ошибка валидации данных»
8833


Добрый день. Хотела подключить эл. почту, появляется «Ошибка валидации данных»
8833
Добрый день.
Посмотрите в инструкции самую последнюю строку http://nethouse.ru/about/instructions/podklyuchit_pochtu_k_domenu



выдает ошибку, не могу отредактировать товар. Сайт tvfirm.ru


выдает ошибку, не могу отредактировать товар. Сайт tvfirm.ruДобрый день.
Какую ошибку? Приложите скриншот с сообщением об ошибке.


artantar

06.09.2015, 18:12

Добрый день!
Верстаю страницу — добавляю фото. Редактор перестал сохранять, появляется надпись: «введены невалидные данные». Скриншот прилагаю: https://cloud.mail.ru/public/FD2b/BkcKRHdPV

Адрес сайта: http://artantar.nethouse.ru/

Заранее признателен за решение моего вопроса.


Добрый день!
Верстаю страницу — добавляю фото. Редактор перестал сохранять, появляется надпись: «введены невалидные данные». Скриншот прилагаю: https://cloud.mail.ru/public/FD2b/BkcKRHdPV

Адрес сайта: http://artantar.nethouse.ru/

Заранее признателен за решение моего вопроса.
Здравствуйте!
В описание товара добавляете фото? В каком формате изображение и размере?
Если страница подобно этой artantar.nethouse.ru/products/15939038 сделана, то вероятно вы ее перезагрузили описанием.
Попробуйте загрузить фото на менее загруженную страницу с описанием и напишите о результате.

Для такого подробного описания страницы «товара» рекомендуем использовать текстовые страницы, там помещается до 65000 знаков (в том числе скрытых, например таблицы). В описании на странице самого предложения товара сократить и поставить ссылки на текстовые с подробным описанием.

Обратите внимание на скриншоте подчеркнуто красным, вы копируете тексты и элементы со сторонних ресурсов?
9597

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


domohozayka

26.09.2015, 15:59

Здравствуйте, помогите и мне! При заполнении в каталоге параметров товара, после нажатия сохранить появляется рамочка: «Введены невалидные данные». domoxol.ru
Заранее спасибо!


Здравствуйте, помогите и мне! При заполнении в каталоге параметров товара, после нажатия сохранить появляется рамочка: «Введены невалидные данные». domoxol.ru
Заранее спасибо!
Здравствуйте!
Что именно вводите в параметры и на какой странице?


domohozayka

26.09.2015, 17:00

В каталоге, ввожу параметры к каждой модели- размер,цвет,материал


В каталоге, ввожу параметры к каждой модели- размер,цвет,материал
Более конкретно опишите и приложите скриншот, какие вводите параметры?
Размер вводите целые числа или используете знаки «,» или «.»
Пример конкретного товара с ошибкой скриншот и ссылку на страницу (адрес сайта в виде имясайта.nethouse.ru)


domohozayka

26.09.2015, 17:18

В каталоге, ввожу параметры к каждой модели- размер,цвет,материал
Спасибо, уже разобралась:)!


domohozayka

26.09.2015, 17:37

Спасибо, разобралась!:)
Скажите, а возможно в товарную группу, в обувь добавить чешки?


Спасибо, разобралась!:)
Скажите, а возможно в товарную группу, в обувь добавить чешки?
Товарные группы взяты из яндекс маркета. Расширение списка пока не планируется.


Здравствуйте,
появилось «не валидные-данные..»
http://fromfinland.nethouse.ru/products/maz-dlya-sustavov-arthro-nivelvoide


Здравствуйте,
появилось «не валидные-данные..»
http://fromfinland.nethouse.ru/products/maz-dlya-sustavov-arthro-nivelvoide
Добрый день.
Видим, что у вас не оплачен товар свыше 1000 позиций
9825


Добрый день, помогите!
http://rusznmo.nethouse.ru — у нас сайт на Вашем портале. При попытке опубликовать новость с внесением таблицы, пишет что введены невалидные данные.
10185
Почему такое происходит? таблица довольно объемная, на 1855 строк в два столбца (пытались разбить сократив кол-во строк но добавив столбцы, все равно пишет что введены невалидные данные). Как нам быть? Нужно чтобы эти данные были именно в теле новостного сообщения а не файлом.


Добрый день, помогите!
http://rusznmo.nethouse.ru — у нас сайт на Вашем портале. При попытке опубликовать новость с внесением таблицы, пишет что введены невалидные данные.
10185
Почему такое происходит? таблица довольно объемная, на 1855 строк в два столбца (пытались разбить сократив кол-во строк но добавив столбцы, все равно пишет что введены невалидные данные). Как нам быть? Нужно чтобы эти данные были именно в теле новостного сообщения а не файлом.
Добрый день.

Таблицу от куда копировали?
Попробуйте выделить весь контент на странице и нажать на очистку от форматирования, после попробовать сохранить.
10186
На странице можно разместить максимум 65535 символов включая символы форматирования текста и таблицы. Если количество будет превышено, то часть текста/таблицы может после сохранения удалиться.


Добрый день.

Таблицу от куда копировали?
Попробуйте выделить весь контент на странице и нажать на очистку от форматирования, после попробовать сохранить.
10186
На странице можно разместить максимум 65535 символов включая символы форматирования текста и таблицы. Если количество будет превышено, то часть текста/таблицы может после сохранения удалиться.

Копировали и из ворда и из экселя.
Нажатие на очистку от форматирования не помогло.
Информационного сообщения о том что превышен лимит водимых символов нет.
10187


Копировали и из ворда и из экселя.
Нажатие на очистку от форматирования не помогло.
Информационного сообщения о том что превышен лимит водимых символов нет.
10187
Скорее всего, вместе с скопированным текстом, были скопированы скрытые символы, которые в последствии могут нарушить работу страницы/сайта, поэтому вам отображается данное предупреждение.

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

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


Помогло копирование через блокнот, но пришлось избавиться от столбца с нумерацией. Спасибо за оперативную и качественную помощь!


Powered by vBulletin® Version 4.1.7 Copyright © 2023 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot

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

  • Назад (en-US)
  • Обзор: Forms
  • Далее

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

Начальные требования: Владение компьютером, достаточное понимание HTML, CSS, и JavaScript.
Цель: Понять, что такое валидация на стороне клиента, почему это важно и как применять различные техники для её реализации.

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

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

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

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

  • «Обязательное поле» (Вы не можете оставить поле пустым).
  • «Пожалуйста, введите номер телефона в формате xxx-xxxx» (Чтобы данные считались корректными, их необходимо указать в определённом формате).
  • «Пожалуйста, введите корректный email-адрес» (вы ввели данные в неправильном формате).
  • «Длина пароля должна быть от 8 до 30 символов и включать одну заглавную букву, один символ, и одну цифру.» (Требования к формату данных достаточно конкретные).

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

Если формат корректен, приложение позволяет отправить данные на сервер и (обычно) сохранить в базу данных; в противном случае выводится сообщение с описанием того, что нужно исправить, позволяя ввести данные снова.

Мы хотим максимально упростить заполнение веб-форм. Тогда почему мы настаиваем валидации данных? На это есть три основные причины:

  • Мы хотим получать правильные данные в правильном формате. Наши приложения не будут работать должным образом, если данные от пользователей хранятся в неправильном формате, некорректны сами по себе или вовсе пропущены.
  • Мы хотим защитить данные пользователей. Принуждение пользователей вводить надёжные пароли облегчает защиту их аккаунтов.
  • Мы хотим защитить себя. Существует множество способов, позволяющих злоумышленникам с помощью незащищённых форм навредить приложению (смотрите Безопасность вебсайтов).

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

Типы валидации на стороне клиента

Существует два типа валидации на стороне клиента, с которыми вы столкнётесь в Интернете:

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

Использование встроенной валидации форм

Одной из самых важных функций элементов форм HTML5 (en-US) является способность валидировать бóльшую часть пользовательских данных без использования JavaScript. Это выполняется с помощью атрибутов валидации у элементов формы. Многие из них мы уже рассмотрели в этом курсе:

  • required: Определяет, что для отправки формы данное поле предварительно должно быть заполнено.
  • minlength и maxlength: Задаёт минимальную и максимальную длину текстовых данных (строк)
  • min и max: Задаёт минимальное и максимальное значение для поля, расчитанного на числовой тип данных
  • type: Определяет тип данных, на который рассчитано поле: число, email-адрес или какой-то другой предустановленный тип
  • pattern: С помощью регулярного выражения, определяет шаблон, которому должны соответствовать вводимые данные.

Если данные, введённые в поле формы, соответствуют правилам перечисленных выше атрибутов, они считаются валидными, если нет — не валидными

Когда элемент валиден, справедливы следующие утверждения:

  • Элемент соответствует CSS-псевдоклассу :valid, позволяющему стилизовать только валидные элементы.
  • Если пользователь пытается отправить данные, браузер отправит форму при условии, что ничто другое (например, JavaScript) не помешает ему это сделать

Когда элемент не валиден, справедливы следующие утверждения:

  • Элемент соответствует CSS-псевдоклассу :invalid или, в зависимости от ошибки, другим псевдоклассам (например, :out-of-range), которые позволяют применять определённые стили к элементам, не являющимся валидными.
  • Если пользователь пытается отправить данные, браузер заблокирует форму и выведет сообщение об ошибке.

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

В этом разделе мы протестируем некоторые из атрибутов, которые обсуждали выше.

Простой начальный файл

Давайте начнём с простого примера: поле, позволяющее указать своё предпочтение — банан или вишня. Этот пример включает обычное текстовое поле <input>, связанный с ним элемент <label> и кнопку отправки формы <button>. Исходный код можно найти на GitHub по адресу fruit-start.html, а ниже приведён рабочий пример.

<form>
  <label for="choose">Would you prefer a banana or cherry?</label>
  <input id="choose" name="i_like">
  <button>Submit</button>
</form>
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}

Для начала скопируйте файл fruit-start.html в новую папку на вашем жёстком диске.

Атрибут required

Самым простым в HTML5-валидации является атрибут required. Добавьте его к элементу, чтобы сделать заполнение обязательным. Элемент с данным атрибутом соответствует CSS-псевдоклассу :required, а если поле ввода пустое, вместо отправки формы отобразится сообщение об ошибке. Пока поле пустое, оно также будет соответствовать CSS-псевдоклассу :invalid.

Добавьте к полю атрибут required, как показано ниже.

<form>
  <label for="choose">Would you prefer a banana or cherry? (required)</label>
  <input id="choose" name="i_like" required>
  <button>Submit</button>
</form>

Обратите внимание на CSS, который включён в файл примера:

input:invalid {
  border: 2px dashed red;
}

input:invalid:required {
  background-image: linear-gradient(to right, pink, lightgreen);
}

input:valid {
  border: 2px solid black;
}

Данный CSS задаёт полю красную пунктирную рамку, когда оно не валидно, а когда валидно — сплошную чёрную. Мы также добавили фоновый градиент для обязательных не валидных полей. Проверьте новое поведение в примере ниже:

Попробуйте отправить форму без введения значения. Обратите внимание, что не валидное поле получает фокус, появляется сообщение об ошибке («Заполните это поле») и блокируется отправка формы.

Наличие атрибута required у любого элемента, который его поддерживает, означает, что элемент соответствует CSS-псевдоклассу :required, независимо от того, имеет он значение или нет. Если элемент <input> не содержит значение, он будет соответствовать псевдоклассу :invalid.

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

Валидация с помощью регулярного выражения

Ещё одной полезной функцией валидации является атрибут pattern, который в виде значения принимает Регулярное выражение. Регулярное выражение (regex) — это шаблон, который может быть использован для сопоставления набора символов в текстовой строке, поэтому они идеально подходят для валидации формы и используются для множества других целей в JavaScript.

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

  • a — Соответствует одному символу a (не b, не aa, и так далее).
  • abc — Соответствует символу a, за которой следует b, за которой следует c.
  • ab?c — Соответствует символу a, за которым опционально может следовать b, за которым следует c. ( ac или abc)
  • ab*c — Соответствует символу a, за которым опционально может следовать любое количество символов b, за которыми следует c. ( ac , abc, abbbbbc, и так далее).
  • a|b — Соответствует символу a или b.
  • abc|xyz — Соответствует в точности abc или в точности xyz (но не abcxyz или a или y, и так далее).

Есть еще много возможностей, которые мы не упомянули. Полный список со множеством примеров можно найти в документации по Регулярным выражениям

Давайте рассмотрим пример. Добавьте в атрибут pattern следующий шаблон:

<form>
  <label for="choose">Would you prefer a banana or a cherry?</label>
  <input id="choose" name="i_like" required pattern="[Bb]anana|[Cc]herry">
  <button>Submit</button>
</form>
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}

Это даёт нам следующее обновление — опробуйте его:

В этом примере элемент <input> принимает одно из четырёх возможных значений: строку «banana», «Banana», «cherry», или «Cherry». Регулярные выражения чувствительны к регистру, но с помощью шаблона «Aa», вложенного в квадратные скобки, мы сделали поддержку написания слова как с большой, так и с маленькой буквы.

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

Если не пустое значение элемента <input> не соответствует шаблону регулярного выражения, input будет соответствовать псевдоклассу :invalid.

Примечание: Некоторым типам элементов <input> для валидации с помощью регулярного выражения не требуется атрибут pattern. Например, поле с типом email валидирует значение по шаблону одного email-адреса или, если присутствует атрибут multiple (en-US), шаблону списка email-адресов, разделённых запятыми.

Ограничение длины вводимых значений

Можно ограничить максимально допустимое количество символов для текстовых полей <input> или <textarea> (en-US) используя атрибуты minlength (en-US) и maxlength. Поле будет не валидным, если количество символов его содержимого будет меньше minlength (en-US) или больше maxlength.

Зачастую браузеры не позволяют пользователям вводить в текстовое поле значение, длина которого превышает максимально допустимую. Можно существенно повысить удобство использования, если помимо ограничения в атрибуте maxlength добавить доступный индикатор, отображающий текущее и максимально допустимое количество символов, что даст пользователю возможность уместить содержимое в заданные рамки. Хорошим примером является окно написания твита в Twitter. Для реализации такого функционала можно использовать JavaScript, включая решения, использующие maxlength.

Ограничение допустимых значений

В полях, предназначенных для ввода чисел (например, <input type="number">), диапазон допустимых значений можно определить с помощью атрибутов min и max. Если поле содержит значение за пределами данного диапазона, оно будет не валидным.

Давайте рассмотрим другой пример. Создайте новую копию файла fruit-start.html.

Содержимое элемента <body> замените на:

<form>
  <div>
    <label for="choose">Would you prefer a banana or a cherry?</label>
    <input type="text" id="choose" name="i_like" required minlength="6" maxlength="6">
  </div>
  <div>
    <label for="number">How many would you like?</label>
    <input type="number" id="number" name="amount" value="1" min="1" max="10">
  </div>
  <div>
    <button>Submit</button>
  </div>
</form>
  • Здесь мы в поле с типом text атрибутам minlength и maxlength, задали одинаковое значение 6, что соответствует количеству символов в словах banana и cherry.
  • В поле с типом number атрибуту min мы задали значение 1, а атрибуту max значение 10. При вводе чисел за пределами данного диапазона, поле будет становиться не валидным; с помощью стрелок увеличения/уменьшения пользователи не смогут выйти за границы диапазона. Текущее поле не является обязательным для заполнения, поэтому даже после очистки будет оставаться валидным.
input:invalid {
  border: 2px dashed red;
}

input:valid {
  border: 2px solid black;
}

div {
  margin-bottom: 10px;
}

Демонстрационный пример:

Примечание: <input type="number"> (и другие типы, такие как range и date) могут также принимать атрибут step (en-US), который задаёт шаг увеличения или уменьшения значения при использовании кнопок вверх и вниз. В примере выше мы явно не указывали атрибут step, поэтому он получает значение по умолчанию, равное 1. Это значит, что дробные числа, такие как 3.2, будут не валидными.

Полный пример

Ниже представлен полный пример, демонстрирующий использование встроенного функционала валидации. Сначала немного HTML:

<form>
  <p>
    <fieldset>
      <legend>Do you have a driver's license?<abbr title="This field is mandatory" aria-label="required">*</abbr></legend>
      <!-- Так как в группе радио-кнопок, имеющих одинаковое имя, выбранной может быть
          только одна, то и атрибут "required" достаточно задать хотя бы одной кнопке,
          чтобы сделать всю группу обязательной для заполнения -->
      <input type="radio" required name="driver" id="r1" value="yes"><label for="r1">Yes</label>
      <input type="radio" required name="driver" id="r2" value="no"><label for="r2">No</label>
    </fieldset>
  </p>
  <p>
    <label for="n1">How old are you?</label>
    <!-- Атрибут "pattern" может выступать фолбэком для браузеров, которые
        не поддерживают поля ввода c числовым типом данных. Те браузеры,
        которые такие поля поддерживают, будут просто игнорировать его.
        Как раз, ниже атрибут "pattern" выполняет роль фолбека.
     -->
    <input type="number" min="12" max="120" step="1" id="n1" name="age"
           pattern="d+">
  </p>
  <p>
    <label for="t1">What's your favorite fruit?<abbr title="This field is mandatory" aria-label="required">*</abbr></label>
    <input type="text" id="t1" name="fruit" list="l1" required
           pattern="[Bb]anana|[Cc]herry|[Aa]pple|[Ss]trawberry|[Ll]emon|[Oo]range">
    <datalist id="l1">
      <option>Banana</option>
      <option>Cherry</option>
      <option>Apple</option>
      <option>Strawberry</option>
      <option>Lemon</option>
      <option>Orange</option>
    </datalist>
  </p>
  <p>
    <label for="t2">What's your e-mail address?</label>
    <input type="email" id="t2" name="email">
  </p>
  <p>
    <label for="t3">Leave a short message</label>
    <textarea id="t3" name="msg" maxlength="140" rows="5"></textarea>
  </p>
  <p>
    <button>Submit</button>
  </p>
</form>

И немного CSS для стилизации HTML:

form {
  font: 1em sans-serif;
  max-width: 320px;
}

p > label {
  display: block;
}

input[type="text"],
input[type="email"],
input[type="number"],
textarea,
fieldset {
  width : 100%;
  border: 1px solid #333;
  box-sizing: border-box;
}

input:invalid {
  box-shadow: 0 0 5px 1px red;
}

input:focus:invalid {
  box-shadow: none;
}

Получим следующее:

В статье Атрибуты валидации (en-US) можно найти полный список атрибутов, которые можно использовать для ограничения допустимых значений ввода и типов полей input, которые их поддерживают.

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

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

Constraint Validation API

Большинство браузеров поддерживают Constraint Validation API, который состоит из набора свойств и методов, доступных на DOM-интерфейсах следующих элементов форм:

  • HTMLButtonElement (представляет элемент <button>)
  • HTMLFieldSetElement (представляет элемент <fieldset>)
  • HTMLInputElement (представляет элемент <input>)
  • HTMLOutputElement (представляет элемент <output>)
  • HTMLSelectElement (представляет элемент <select>)
  • HTMLTextAreaElement (представляет элемент <textarea>)

Для перечисленных выше элементов Constraint Validation API делает доступными следующие свойства.

  • validationMessage: Возвращает локализованное сообщение, описывающее ограничения валидации (если таковые имеются), которым не удовлетворяет определённый элемент. Если элемент не участвует в валидации (willValidate установлено в false) или значение элемента удовлетворяет установленным ограничениям (является валидным), будет возвращена пустая строка.
  • validity: Возвращает объект ValidityState, который содержит несколько свойств, описывающих состояние валидности элемента. Подробное описание всех свойств доступности можно найти на странице справочника ValidityState; ниже приведён список наиболее используемых:
    • patternMismatch: Возвращает true, если значение не соответствует шаблону, указанному в атрибуте pattern, и false если соответствует. Если true, элемент соответствует CSS-псевдоклассу :invalid.
    • tooLong: Возвращает true, если значение длиннее максимальной длины, указанной в атрибуте maxlength, и false если оно короче или равно ей. Если true, элемент соответствует CSS-псевдоклассу :invalid.
    • tooShort: Возвращает true, если значение короче минимальной длины, указанной в атрибуте minlength, и false если оно длинее или равно ей. Если true, элемент соответствует CSS-псевдоклассу :invalid.
    • rangeOverflow: Возвращает true, если значение больше указанного в атрибуте max максимума, и false если меньше или равно ему. Если true, элемент соответствует CSS-псевдоклассам :invalid и :out-of-range
    • rangeUnderflow: Возвращает true, если значение меньше указанного в атрибуте min, и false если больше или равно ему. Если true, элемент соответствует CSS-псевдоклассу :invalid и :out-of-range.
    • typeMismatch: Возвращает true, если значение не соответствует требуемому синтаксису (когда для type задано значение email или url), и false если синтаксис корректный. Если true, элемент соответствует CSS-псевдоклассу :invalid.
    • valid: Возвращает true, если элемент соответствует всем ограничениям валидации — следовательно, считается валидным, и false если не соответствует какому-то ограничению. Если true, элемент соответствует CSS-псевдоклассу :valid; иначе :invalid.
    • valueMissing: Возвращает true, если у элемента есть атрибут required, но не введено значенение, иначе возвращает false. Если true, элемент соответствует CSS-псевдоклассу :invalid.
  • willValidate: Возвращает true, если элемент будет участвовать в валидации при отправке формы; иначе возвращает false.

Также для перечисленных выше элементов Constraint Validation API делает доступными следующие методы.

  • checkValidity(): Возвращает true, если значение элемента проходит валидацию, иначе возвращает false. Если элемент не валиден, данный метод также запускает на нём событие invalid.
  • setCustomValidity(message): Позволяет добавить в элемент кастомное сообщение об ошибке; при этом элемент будет считаться не валидным и отобразится указанная ошибка. Это позволяет использовать JavaScript-код, чтобы представить ошибку валидации иначе, чем это предусмотрено стандартными средствами валидации HTML5. При сообщении об ошибке данное кастомное сообщение показывается пользователю.

Реализация кастомного сообщения об ошибке

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

У этих автоматических сообщений есть два недостатка:

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

Пример сообщения об ошибке на англоязычной странице в браузере Firefox с настроенным французским языком

Настройка таких сообщений об ошибках является одной из наиболее распространённых причин использования Constraint Validation API. Давайте рассмотрим простой пример, как это делается.

Начнём с простого HTML (Не стесняйтесь поместить это в пустой HTML-файл. Вы можете взять за основу свежую копию fruit-start.html, если хотите):

<form>
  <label for="mail">I would like you to provide me with an e-mail address:</label>
  <input type="email" id="mail" name="mail">
  <button>Submit</button>
</form>

Добавьте на страницу следующий JavaScript:

const email = document.getElementById("mail");

email.addEventListener("input", function (event) {
  if (email.validity.typeMismatch) {
    email.setCustomValidity("I am expecting an e-mail address!");
  } else {
    email.setCustomValidity("");
  }
});

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

В коде обработчика мы проверяем, возвращает ли свойство поля email validity.typeMismatch значение true, что значит, что содержащееся значение не соответствует шаблону корректного email-адреса. Если возвращается true, мы вызываем метод setCustomValidity() (en-US) с кастомным сообщением. Это делает поле не валидным, поэтому попытка отправить форму приводит к ошибке и отображается кастомное сообщение об ошибке.

Если свойство validity.typeMismatch возвращает false, мы вызываем метод setCustomValidity() с пустой строкой. Это делает поле валидным, поэтому форма может быть успешно отправлена.

Попробовать пример можно ниже:

Более подробный пример

Теперь, когда мы разобрали простой пример, давайте посмотрим, как можно использовать данный API для создания более сложной валидацию.

Во-первых, HTML. Опять же, не стесняйтесь писать его вместе с нами:

<form novalidate>
  <p>
    <label for="mail">
      <span>Please enter an email address:</span>
      <input type="email" id="mail" name="mail" required minlength="8">
      <span class="error" aria-live="polite"></span>
    </label>
  </p>
  <button>Submit</button>
</form>

Эта простая форма использует атрибут novalidate, который отключает автоматическую валидацию браузером; это позволяет нашему скрипту взять управление валидацией на себя. Однако, это не отменяет поддержку Constraint Validation API или псевдоклассов, таких как :valid или ему подобных. Это значит, что хотя браузер автоматически и не проверяет валидность формы перед отправкой данных, вы можете сделать это самостоятельно и соответствующим образом стилизовать форму.

Объектом валидации является обязательный для заполнения <input type="email">, длина которого не должна быть меньше 8 символов. Давайте напишем код, проверяющий эти критерии, и покажем кастомное сообщение об ошибке в случае несоблюдения какого-то из них.

Мы хотим показывать сообщение об ошибке внутри элемента <span>. Данному элементу задан атрибут aria-live, чтобы гарантировать, что наше кастомное сообщение об ошибке будет доступно всем, включая пользователей скринридеров.

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

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

body {
  font: 1em sans-serif;
  width: 200px;
  padding: 0;
  margin : 0 auto;
}

p * {
  display: block;
}

input[type=email]{
  -webkit-appearance: none;
  appearance: none;

  width: 100%;
  border: 1px solid #333;
  margin: 0;

  font-family: inherit;
  font-size: 90%;

  box-sizing: border-box;
}

/* Это стили для не валидных полей */
input:invalid{
  border-color: #900;
  background-color: #FDD;
}

input:focus:invalid {
  outline: none;
}

/* Это стили для кастомных сообщений об ошибке */
.error {
  width  : 100%;
  padding: 0;

  font-size: 80%;
  color: white;
  background-color: #900;
  border-radius: 0 0 5px 5px;

  box-sizing: border-box;
}

.error.active {
  padding: 0.3em;
}

Теперь давайте рассмотрим JavaScript, который реализует кастомную валидацию.

// Существуют разные способы получить DOM-узел; здесь мы определяем саму форму и
// поле ввода email и элемент span, в который поместим сообщение об ошибке
const form  = document.getElementsByTagName('form')[0];

const email = document.getElementById('mail');
const emailError = document.querySelector('#mail + span.error');

email.addEventListener('input', function (event) {
  // Каждый раз, когда пользователь что-то вводит,
  // мы проверяем, являются ли поля формы валидными

  if (email.validity.valid) {
    // Если на момент валидации какое-то сообщение об ошибке уже отображается,
    // если поле валидно, удаляем сообщение
    emailError.textContent = ''; // Сбросить содержимое сообщения
    emailError.className = 'error'; // Сбросить визуальное состояние сообщения
  } else {
    // Если поле не валидно, показываем правильную ошибку
    showError();
  }
});

form.addEventListener('submit', function (event) {
  // Если поле email валдно, позволяем форме отправляться

  if(!email.validity.valid) {
    // Если поле email не валидно, отображаем соответствующее сообщение об ошибке
    showError();
    // Затем предотвращаем стандартное событие отправки формы
    event.preventDefault();
  }
});

function showError() {
  if(email.validity.valueMissing) {
    // Если поле пустое,
    // отображаем следующее сообщение об ошибке
    emailError.textContent = 'You need to enter an e-mail address.';
  } else if(email.validity.typeMismatch) {
    // Если поле содержит не email-адрес,
    // отображаем следующее сообщение об ошибке
    emailError.textContent = 'Entered value needs to be an e-mail address.';
  } else if(email.validity.tooShort) {
    // Если содержимое слишком короткое,
    // отображаем следующее сообщение об ошибке
    emailError.textContent = `Email should be at least ${ email.minLength } characters; you entered ${ email.value.length }.`;
  }

  // Задаём соответствующую стилизацию
  emailError.className = 'error active';
}

Комментарии объясняют логику хорошо, но кратко:

  • При каждом изменении значения поля, мы производим его валидацию. Если данные валидны, удаляем ранее отображаемые сообщения об ошибках. Если данные не валдны, запускаем showError(), чтобы показать соответствующую ошибку.
  • При каждой попытке отправить форму, мы снова производим валидацию. Если данные валидны, позволяем отправку формы. Если данные не валидны, запускам showError(), чтобы показать соответствующее сообщение об ошибке, а также предотвращаем отправку формы с помощью preventDefault().
  • Функция showError() использует различные свойства объекта validity поля ввода, чтобы определить тип ошибки и отобразить соответсвущее сообщение.

Рабочий пример:

Constraint Validation API явяется мощным инструментом валидации форм, позволяющим получить контроль над пользовательским интерфейсом, существенно превосходящий возможности HTML и CSS.

Проверка форм без встроенного API

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

Для создания своего валидатора формы, задайте себе несколько вопросов:

Какую тип валидации я должен выполнить?

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

Что мне нужно делать, если форма не проходит валидацию?

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

Как я могу помочь пользователю исправить не валидные данные?

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

  • SmashingMagazine: Form-Field Validation: The Errors-Only Approach
  • SmashingMagazine: Web Form Validation: Best Practices and Tutorials
  • WebFX: 10 Tips for Optimizing Web Form Submission Usability
  • A List Apart: Inline Validation in Web Forms

Пример без использования Constraint Validation API

Чтобы проиллюстрировать это дальше приводится упрощённая версия предыдущего примера, которая работает с устаревшими браузерами.

HTML почти тот такой же; мы только удалили функционал валидации HTML5.

<form>
  <p>
    <label for="mail">
        <span>Please enter an email address:</span>
        <input type="text" id="mail" name="mail">
        <span class="error" aria-live="polite"></span>
    </label>
  </p>
  <!-- Для некоторых устаревших браузеров элементу `button` нужно добавлять
       атрибут `type` с явно заданным значением `submit` -->
  <button type="submit">Submit</button>
</form>

CSS также не требует особых изменений; мы только заменили CSS-псевдокласс :invalid на реальный класс и не использовали селектор по атрибутам, так как он не работает в Internet Explorer 6.

body {
  font: 1em sans-serif;
  width: 200px;
  padding: 0;
  margin : 0 auto;
}

form {
  max-width: 200px;
}

p * {
  display: block;
}

input.mail {
  -webkit-appearance: none;

  width: 100%;
  border: 1px solid #333;
  margin: 0;

  font-family: inherit;
  font-size: 90%;

  box-sizing: border-box;
}

/* Стилизация не валидных полей */
input.invalid{
  border-color: #900;
  background-color: #FDD;
}

input:focus.invalid {
  outline: none;
}

/* Стилизация сообщений об ошибках */
.error {
  width  : 100%;
  padding: 0;

  font-size: 80%;
  color: white;
  background-color: #900;
  border-radius: 0 0 5px 5px;
  box-sizing: border-box;
}

.error.active {
  padding: 0.3em;
}

Существенно изменился только JavaScript-код, который теперь должен выполнять гораздо больше работы.

// Устаревшие браузеры поддерживают несколько способов получения DOM-узла
const form  = document.getElementsByTagName('form')[0];
const email = document.getElementById('mail');

// Ниже приведён способ получения узла следующего родственного DOM-элемента
// Он опасен, потому что можно создать бесконечный цикл.
// В современных браузерах лучше использовать `element.nextElementSibling`
let error = email;
while ((error = error.nextSibling).nodeType != 1);

// Согласно спецификации HTML5
const emailRegExp = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/;

// Многие устаревшие браузеры не поддерживают метод `addEventListener`
// Есть простой способ заменить его; и далеко не единственный
function addEvent(element, event, callback) {
  let previousEventCallBack = element["on"+event];
  element["on"+event] = function (e) {
    let output = callback(e);

    // Колбэк, который возвращает `false`, останавливает цепочку колбэков
    // и прерывает выполнение колбэка события
    if (output === false) return false;

    if (typeof previousEventCallBack === 'function') {
      output = previousEventCallBack(e);
      if(output === false) return false;
    }
  };
}

// Теперь мы можем изменить наши критерии валидации
// Поскольку мы не полагаемся на CSS-псевдокласс, для поля email
// нужно явно задать валидный / не валидный класс
addEvent(window, "load", function () {
  // Проверка, является ли поле пустым (помните, оно не являтеся обязательным)
  // Если поле не пустое, проверяем содержимое на соответствует шаблону email
  const test = email.value.length === 0 || emailRegExp.test(email.value);

  email.className = test ? "valid" : "invalid";
});

// Здесь определяется поведение при вводе пользователем значения поля
addEvent(email, "input", function () {
  const test = email.value.length === 0 || emailRegExp.test(email.value);
  if (test) {
    email.className = "valid";
    error.textContent = "";
    error.className = "error";
  } else {
    email.className = "invalid";
  }
});

// Здесь определяется поведение при попытке отправить данные
addEvent(form, "submit", function () {
  const test = email.value.length === 0 || emailRegExp.test(email.value);

  if (!test) {
    email.className = "invalid";
    error.textContent = "I expect an e-mail, darling!";
    error.className = "error active";

    // Некоторые устаревшие браузеры не поддерживают метод event.preventDefault()
    return false;
  } else {
    email.className = "valid";
    error.textContent = "";
    error.className = "error";
  }
});

Результат выглядит следующим образом:

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

Проверьте свои навыки!

Вы дошли до конца этой статьи, но можете ли вы вспомнить самую важную информацию? Вы можете найти дополнительные тесты, чтобы убедиться, что вы сохранили эту информацию, прежде чем двигаться дальше — Test your skills: Form validation (en-US).

Заключение

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

  • Отображать явные сообщения об ошибках.
  • Снисходительно относиться к формату ввода.
  • Указывать, где именно возникла ошибка. Особенно в больших формах.

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

  • Назад (en-US)
  • Обзор: Forms
  • Далее

In this module

Продвинутые темы

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

Комплексный аудит сайта, что входит, как сделать

Ошибка валидации, что это такое?

Для написания страниц используется HTML – стандартизированный язык разметки, применяемый в веб-разработке. HTML, как любой другой язык, имеет специфические особенности синтаксиса, грамматики и т. д. Если во время написания кода правила не учитываются, то после запуска сайта будут появляться различные виды проблем. Если HTML-код ресурса не соответствует стандарту W3C, то он является невалидным, о чем мы писали выше.

Почему ошибки валидации сайта оказывают влияние на ранжирование, восприятие?

Наличие погрешностей в коде – проблема, с которой необходимо бороться сразу после обнаружения. Поисковые системы «читают» HTML-код, если он некорректный, то процесс индексации и ранжирования может быть затруднен. Поисковые роботы должны понимать, каким является ресурс, что он предлагает, какие запросы использует. Особо критичны такие ситуации для ресурсов, имеющих большое количество веб-страниц.

Как проверить ошибки валидации?

Как проверить ошибки валидации
Для этой работы используется либо технический аудит сайта, либо валидаторы, которые ищут проблемы автоматически. Одним из самых популярных является сервис The W3C Markup Validation Service, выполняющий сканирование с оглядкой на World Wide Web Consortium (W3C). Рассматриваемый валидатор предлагает три способа, с помощью которых можно осуществить проверку сайта:

  • ввод URL-адреса страниц, которые необходимо просканировать;
  • загрузка файла страницы;
  • ввод части HTML-кода, нуждающегося в проверке.

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

Существуют другие сервисы, позволяющие выполнить проверку валидности кода:

  • Dr. Watson. Проверяет скорость загрузки страниц, орфографию, ссылки, а также исходный код;
  • InternetSupervision.com. Отслеживает производительность сайта, проверяет доступность HTML.

Плагины для браузеров, которые помогут найти ошибки в коде

Решить рассматриваемую задачу можно с помощью плагинов, адаптированных под конкретный браузер. Можно использовать следующие инструменты (бесплатные):

  • HTML Validator для браузера Firefox;
  • HTML Validator for Chrome;
  • Validate HTML для Firefox.

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

Как исправить ошибку валидации?

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

  • частичная индексация;
  • медленная загрузка;
  • баги, возникающие во время непосредственной коммуникации пользователя с ресурсом.

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

Технический и SEO-аудит

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

В заключение

На всех сайтах наблюдаются ошибки валидации – их невозможно искоренить полностью, но и оставлять без внимания не стоит. Например, если провести проверку сайтов Google или «Яндекс», то можно увидеть ошибки, однако это не означает, что стоит вздохнуть спокойно и закрыть глаза на происходящее. Владелец сайта должен ставить во главу угла комплексное развитие, при таком подходе ресурс будет наполняться, обновляться и «лечиться» своевременно. Если проблем мало, то можно попробовать устранить их своими силами или с помощью привлечения стороннего частного специалиста. В остальных случаях лучше заказать услугу у проверенного подрядчика.

Что такое ошибки валидации и как их исправить

Просмотров 1.2к. Опубликовано 19.12.2022
Обновлено 19.12.2022

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

В этой статье рассмотрим, что такое валидность, какие могут быть ошибки в HTML-разметке и как их устранить.

Содержание

  1. Что такое HTML-ошибка валидации и зачем она нужна
  2. Чем опасны ошибки в разметке
  3. Как проверить ошибки валидации
  4. Предупреждения
  5. Ошибки
  6. Пример прохождения валидации для страницы сайта
  7. Как исправить ошибку валидации
  8. Плагины для браузеров, которые помогут найти ошибки в коде
  9. Коротко о главном

Что такое HTML-ошибка валидации и зачем она нужна

Под понятием  “валидация” подразумевается процесс онлайн-проверки HTML-кода страницы на соответствие стандартам w3c. Эти стандарты были разработаны Организацией всемирной паутины и стандартов качества разметки. Сама организация продвигает идею унификации сайтов по HTML-коду — чтобы каждому пользователю, вне зависимости от браузера или устройства, было удобно использовать ресурс.

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

Чем опасны ошибки в разметке

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

К наиболее распространённым последствиям ошибок в коде HTML-разметки также относят сбои в нормальной работе сайта и помехи в продвижении ресурса в поисковых системах.

Рассмотрим несколько примеров, как ошибки могут проявляться при работе:

  • Медленно подгружается страница 

Согласно исследованию Unbounce, более четверти пользователей покидают страницу, если её загрузка занимает более 3 секунд, ещё треть  уходит после 6 секунд;

  • Не видна часть текстовых, фото и видео-блоков 

Эта проблема делает контент для пользователей неинформативным, поэтому они в большинстве случаев уходят со страницы, не досмотрев её до конца;

  • Страница может остаться не проиндексированной

Если поисковый робот распознает недочёт в разметке, он может пропустить страницу и прервать её размещение в поисковых системах;

  • Разное отображение страниц на разных устройствах

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

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

Как проверить ошибки валидации

Владельцы ресурсов используют 2 способа онлайн-проверки сайтов на наличие ошибок — технический аудит или использование валидаторов. 

Первый случай подходит для серьёзных проблем и масштабных сайтов. Валидаторами же пользуются ежедневно. Наиболее популярный — сервис The W3C Markup Validation Service. Он сканирует сайт и сравнивает код на соответствие стандартам W3C. Валидатор выдаёт 2 типа несоответствий разметки стандартам W3C: предупреждения и ошибки. 

Давайте рассмотрим каждый из типов чуть подробнее.

Предупреждения

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

Тем не менее, предупреждения всё равно нужно устранять, так как из-за них сайт может работать медленнее — например, по сравнению с конкурентами с такими же сайтами.

Примером предупреждения может быть указание на отсутствие тега alt у изображения. 

Ошибки

Ошибки  —  это те проблемы, которые требуют обязательного устранения. 

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

Распространённым примером ошибки может быть отсутствие тега <!DOCTYPE html> в начале страницы, который помогает информации преобразоваться в разметку. 

Пример прохождения валидации для страницы сайта

Рассмотрим процесс валидации на примере сайта avavax.ru, который создали на WordPress.

пример ошибки валидации

В результате проверки валидатор выдал 17 замечаний. После анализа отчета их можно свести к 3 основным:

  1. атрибут ‘text/javascript’ не требуется при подключении скрипта;
  2. атрибут ‘text/css’ не требуется при подключении стиля;
  3. у одного из элементов section нет внутри заголовка h1-h6.

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

Решить проблемы с предупреждениями для стилей и скриптов можно через добавление кода в файл темы function.php.

Добавление кода в файл

Для этого на хук wp_loaded нужно повесить функцию output_buffer_start(), которая загрузит весь генерируемый код html в буфер. При выводе в буфер вызывается функция output_callback($tag), которая просматривает все теги, находит нежелательные атрибуты с помощью регулярных выражений и заменяет их пробелами. Затем на хук ‘shutdown вешается функция output_buffer_end(), которая возвращает обработанное содержимое буфера.

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

  1. Добавить заголовок в код:  <h3>Обо мне</h3>

Отключить отображение заголовка:

1 #about h3 {
2 display: none;
3 }

После этой части заголовок будет в коде, но валидатор его увидит, а посетитель — нет. 

За 3 действия удалось убрать все предупреждения, чтобы качество кода устроило валидатор. Это подтверждается зелёной строкой с надписью: “Document checking completed. No errors or warnings to show”.

Как исправить ошибку валидации

Всё зависит от того, какими техническими знаниями обладает владелец ресурса. Он может сделать это сам, вручную. Делать это нужно постепенно, разбирая ошибку за ошибкой. Но нужно понимать, что если при проверке валидатором было выявлено 100 проблем — все 100 нужно обязательно решить. 

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

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

Плагины для браузеров, которые помогут найти ошибки в коде

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

Для каждого браузера есть свой адаптивный плагин:

  • HTML Validator для браузера Firefox;
  • HTML Validator for Chrome;
  • HTML5 Editor для Opera.

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

Коротко о главном

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

Проверку ресурса можно проводить тремя путями: валидаторами, специалистам полномасштабного аудита и плагинами в браузере. В большинстве случаев валидатор — самое удобное и быстрое решение для поиска проблем. С его помощью можно выявить 2 типа проблем с разметкой — предупреждения и ошибки. 

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

Даже у крупных сайтов с миллионной аудиторией, например, Яндекс.Дзен или ВКонтакте, есть проблемы с кодом. Но комплексный подход к решению проблем помогает устранять серьёзные моменты своевременно. Нужно развивать сайт всесторонне, чтобы получить результат от его существования и поддержки. Если самостоятельно разобраться с проблемами не получается, не стоит “доламывать” — лучше обратиться за помощью к профессионалам, например, агентствам по веб-аудиту. 

Несколько месяцев назад, Sandeep представил на всеобщее обозрение HTML Constraint API, показав, как можно использовать новые HTML5-элементы ввода и их атрибуты для валидации форм с минимальным использованием JavaScript.

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

На всякий случай напомню, если вы не читали статью Sandeep о нововведениях в HTML5 относительно новых типов элементов ввода и атрибутов тега <input>, которые позволяют браузерам самостоятельно производить валидацию на клиентской стороне без необходимости использования JavaScript. Чтобы начать использование новых возможностей, вам нужно просто добавить новые атрибуты и типы элементов ввода к тегу <input>.

Строго говоря, вам следует использовать HTML5 DOCTYPE, иначе HTML-валидатор выдаст ошибки на странице. Но хорошая новость состоит в том, что новые функции имеют обратную совместимость. Если, к примеру, какой-нибудь старый браузер их не поддерживает, то это не «сломает» всю HTML-страницу – неподдерживаемые элементы будут отображены как <input type=”text”>.

  • Обязательные поля
  • Валидация данных
  • Валидация email, URL и номеров
  • Использование CSS для подсветки обязательных полей и неверно введенных данных
  • Отключение встроенной в браузер валидации
  • Кроссбраузерность
  • Заключение

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

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

<form action="" method="post">
     <fieldset>
         <legend>Booking Details</legend>
         <div>
             <label for="name">Name (required):</label>
             <input type="text" id="name" name="name" value="" aria-describedby="name-format">
             <span id="name-format" class="help">Format: firstname lastname</span>
         </div>
         <div>
             <label for="email">Email (required):</label>
             <input type="text" id="email" name="email" value="">
         </div>
         <div>
             <label>Website:</label>
             <input type="text" id="website" name="website" value="">
         </div>
         <div>
             <label for="numTickets"><abbr title="Number">No.</abbr> of Tickets (required):</label>
             <input type="text" id="numTickets" name="numTickets" value="">
         </div>
         <div class="submit">
             <input type="submit" value="Submit">
         </div>
     </fieldset>
 </form>

В данном примере каждый тег <input> ассоциирован с тегом <label>. Атрибут for тега <label> сравнивается со значением атрибута id соответствующего тега <input>. Это позволяет однозначно присвоить значения меток (тегов <label>) нужным элементам ввода. Также, это означает, что если вы кликните на метке, то соответствующий элемент ввода получит фокус.

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

Я также использовал WAI ARIA атрибут aria-describedby, который помогает пользователям с ограниченными возможностями ввести свое имя в правильном формате.

<label for="name">Name (required):</label> 
<input type="text" id="name" name="name" value="" aria-describedby="name-format">
  <span id="name-format" class="help">Format: firstname lastname</span>

Это отображается, когда поле ввода получает фокус, предоставляя контекстно-зависимую справку:

.help {     display:none;     font-size:90%; } input:focus + .help {     display:inline-block; }

Чтобы провести валидацию этой формы, нам необходимо:

  • Проверить заполнены ли обязательные поля;
  • Убедиться, что значение поля с именем является именно именем;
  • Проверить формат введенного email-адреса;
  • Проверить, чтобы введенный URL-адрес соответствовал формату;
  • Убедиться, что было указано количество билетов.

Валидация обязательных полей на предмет их правильного заполнения, не сложнее добавления для поля ввода атрибута required. В нашем случае, это поля Name, Email и Number of Tickets. Например, поле Name с изменениями будет выглядеть так:

<div>
         <label for="name">Name:</label>
         <input id="name" name="name" value="" aria-describedby="name-format" required>
         <span id="name-format" class="help">Format: firstname lastname</span>
</div>

Если мы попытаемся отправить данную форму, не заполнив всех обязательных полей, браузер оповестит о необходимости это сделать:

Обязательные поля

Наверное, вы заметили, что наличия атрибута ‘required’ в тегах меток для обязательных полей теперь не требуется. Это сделано потому, что программы, читающие с экрана, указывают наличие атрибута required также и для меток. В таком случае, сообщение о том, что поле обязательно к заполнению, прозвучит два раза, что, естественно, лишнее.

Предупреждение: не все браузеры имеют поддержку атрибута required, поэтому в некоторых комбинациях «браузер/программа чтения с экрана» могут возникать ошибки. Поэтому, на данный момент лучшей практикой будет указание атрибута aria-required=”true”:

<input id="name" name="name" value="" aria-describedby="name-format" required aria-required=”true”/>

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

Нам нужно, чтобы содержимое поля ‘Name’ имело формат ‘Firstname Lastname‘ и включало в себя только буквы и пробелы (в реальных сценариях, возможно, нужно будет принять во внимание и другие символы).

Этого можно достичь, добавив атрибут pattern к полю ‘Name’, установив его значение в виде регулярного выражения, которое описывает правило, которому должны соответствовать вводимые данные:

<input id="name" name="name" value="" aria-describedby="name-format" required aria-required=”true” pattern="[A-Za-z-0-9]+s[A-Za-z-'0-9]+">

При использовании атрибута pattern, символы ^ и $ зарезервированы для начала и конца регулярного выражения и не должны в него включаться.

Вы можете помочь пользователю, использовав атрибут title, который подсказывает требуемый формат ввода:

<input id="name" name="name" value="" aria-describedby="name-format" required aria-required=”true” pattern="[A-Za-z-0-9]+s[A-Za-z-'0-9]+"  title="firstname lastname">

Текст в атрибуте title затем присоединяется к встроенному валидационному сообщению:

Валидация данных

Стоит заметить, что некоторые сочетания «программа чтения с экрана/браузер» могут привести к ситуации, когда значение атрибута title будет прочитано несколько раз, в дополнение к тексту атрибута aria-describedby, поэтому обратите на это внимание.

К примеру, я обнаружил, что использование программы NVDA с IE10 ведет к двойному прочтению: как атрибута title, так и aria-describedby. Однако NVDA с Chrome и Firefox ведет себя совершенно нормально – читается только текст атрибута aria-describedby.

Далее, мы рассмотрим этот вопрос и покажем решение с использованием CSS3.

Чтобы убедиться, что пользователь ввел верные данные в поля email, website и number of tickets, мы можем использовать новые элементы ввода, появившиеся в HTML5:

<input **type="email"** id="email" name="email" required> … <input **type="url"** id="url" name="url"> … <input **type="number"** id="numTickets" name="numTickets" required>

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

Валидация email, URL и номеров

Валидация email, URL и номеров - 2

Также заметим, что атрибут type больше не является обязательным. Если вы явно не укажете тип элемента ввода, то по умолчанию он будет равен type=»text».

Предположим, что мы хотим ограничить число билетов, которое может купить один человек. Это можно реализовать, используя атрибуты max и min:

<input type="number" min="1" max="4" id="numTickets" name="numTickets">

Если пользователь введет число меньшее 1 или большее 4, то выведется сообщение о том, что диапазон ввода ограничен.

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

Селекторы обязательных полей могут использовать псевдокласс :required:

input:required {     background:hsl(180, 50%, 90%);     border:1px solid #999; }

А дополнительные – псевдокласс :optional:

input:optional {     background:hsl(300, 50%, 90%);     border:1px dotted hsl(180, 50%, 90%); }

Успешное или неудачное прохождение процедуры валидации может показываться пользователю с помощью псевдоклассов :valid, :invalid, :in-range и :out-of-range:

input:valid, input:in-range {     background:hsl(120, 50%, 90%);     border-color:hsl(120, 50%, 50%); }  input:invalid, input:out-of-range {     border-color:hsl(0, 50%, 50%);     background:hsl(0, 50%, 90%); }

Использование CSS для подсветки обязательных полей и неверно введенных данных

Ранее, я заметил, что определенные сочетания «программа чтения с экрана/браузер» ведут к двойному прочтению атрибутов title и aria-describedby.

Что ж, одним из способов обойти это препятствие является удаление атрибута title из тега элемента ввода и использование CSS3-псеводкласса :invalid, чтобы показать текст атрибута aria-describedby:

input:focus + .help, input:invalid + .help {     display:inline-block; }

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

После всех манипуляций HTML-код должен выглядеть так:

<form action="" method="post">
     <fieldset>
         <legend>Booking Details</legend>
         <div>
             <label for="name">Name:</label>
             <input id="name" name="name" value="" required  pattern="[A-Za-z-0-9]+s[A-Za-z-'0-9]+" aria-required="true" aria-describedby="name-format">
             <span id="name-format" class="help">Format: firstname lastname</span>
         </div>
         <div>
             <label for="email">Email:</label>
             <input type="email" id="email" name="email" value="" required aria-required="true">
         </div>
         <div>
             <label for="website">Website:</label>
             <input type="url" id="website" name="website" value="">
         </div>
         <div>
             <label for="numTickets"><abbr title="Number">No.</abbr> of Tickets:</label>
             <input type="number" id="numTickets" name="numTickets" value="" required aria-required="true" min="1" max="4">
         </div>
         <div class="submit">
             <input type="submit" value="Submit">
         </div>
     </fieldset>
 </form>

Вы можете отключить встроенную в браузер валидацию, добавив атрибут novalidate к тегу <form>:

<form novalidate>     … </form>

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

Плохая же новость заключается в частичной поддержке в настольной версии Safari и её отсутствии во всех браузерах iOS Safari и в стандартных браузерах для Android. Если вам нужна поддержка старых версий IE (ниже версии 10), то там вы ее также не обнаружите.

Что же можно сделать, если требуется поддержка браузеров, которые не имеют встроенных средств валидации?

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

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

Третий подход подразумевает использование JavaScript для обнаружения поддержки валидации форм в браузере, и, если таковая имеется, то использовать её; в противном же случае обратиться к JavaScript-валидации.

Библиотеки наподобие Modernizr могут помочь обнаружить поддержку HTML5, но вы всегда можете написать собственный код, если не хотите подключать стороннюю JavaScript-библиотеку:

// Без Moderizr
 var inputElem = document.createElement('input');
 if (!('required' in inputElem)) {
     // JavaScript-валидация формы
   }
  ...  
// С Modernizr
 if (!Modernizr.input.required) {
     // JavaScript-валидация формы
 }

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

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

Также, было рассмотрено использование новых CSS3-псеводклассов для отображения визуальных подсказок о том, какие поля обязательны к заполнению, а какие нет, какие поля заполнены правильно, а какие — нет.

Наконец мы поговорили об отключении HTML-валидации форм и обнаружении поддержки этой возможности в различных браузерах.

Валидация

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

Описанное здесь поведение валидаций и отображение ошибок реализовано в библиотеке «React UI Validations», по возможности используйте эту библиотеку в продукте.

Принципы

Задача дизайнера — сделать так, чтобы пользователь не совершил ошибку и валидация не понадобилась, для этого:

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

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

Виды валидации

Существует три вида валидаций: мгновенная, по потере фокуса и по отправке формы.

Чем раньше интерфейс сообщает об ошибке, тем лучше — пользователю проще вернуться и исправить ошибку.

Самый быстрый способ сообщить об ошибке — мгновенная валидация. Но она возможна только в тех случаях, когда в процессе ввода понятно, что значение некорректное. Обычно такие ошибки связаны с неправильной раскладкой клавиатуры (кириллица вместо латиницы) или вводом букв в цифровое поле (ИНН, КПП и др.) Для этих случаев мы используем поля с масками: ввод неподходящих символов в них заблокирован. Поэтому в наших интерфейсах есть только два вида валидации:

  • по потере фокуса — основной вид валидации
  • по отправке формы — для тех случаев, когда валидация по потере фокуса невозможна.

Валидация по потере фокуса

Когда использовать

Этот вид валидации подходит для большинства случаев.

Как работает

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

Валидация срабатывает сразу после потери фокуса, если значение в поле заполнено. Если найдена ошибка, поле подсвечивается красным. Фокус в это поле автоматически не возвращается:

Текст ошибки появляется в тултипе, когда поле получает наведение или фокус:

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

Красная подсветка снимается с поля, как только пользователь начал исправлять ошибочное значение.

Валидация при отправке формы

Когда использовать

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

Как работает

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

При прокрутке к первому полю от верхней границы окна до ошибочного поля остается отступ 48px — шесть модулей.

Блокирование кнопки отправки

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

Как только заполнены все обязательные поля — кнопка становится активной. Если после этого пользователь стер значение в одном из полей — кнопка снова должна стать не активной.

Сообщения об ошибках

Об ошибках можно сообщать двумя способами:

  1. Красным текстом около поля, обычно под полем или справа от него:
  2. Текстом в тултипе:

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

Тултипы

Как работают

Тултип с подсказкой появляется в двух случаях:

  1. При наведении на поле с ошибкой.
  2. Когда поле с ошибкой получает фокус.

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

Тултип исчезает, когда:

  1. Курсор вышел из области поля с ошибкой.
  2. Поле с ошибкой потеряло фокус.

Тултип по наведению перекрывает тултип по фокусу.

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

Единообразие поведения и внешнего вида

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

Красные тексты на странице

Как работают

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

Как только пользователь начал исправлять значение, красная подсветка поля исчезает, и цвет текста ошибки меняется на черный — #222.

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

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

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

На более сложных формах выводите сообщение об ошибке в тултипе.

Валидация зависимых полей

Зависимые поля — это поля, значение которых зависит друг от друга.

Ошибки, которые связаны с нарушением зависимости полей, мы показываем после сабмита формы. Например, ИНН и КПП. Если пользователь указал ИНН из 10 цифр, а поле с КПП оставил пустым, после отправки формы пустое поле с КПП будет подсвечено.

ИНН может быть двух видов:

  • 10-значный у юридических лиц
  • 12-значный у ИП.

Если пользователь указал ИНН из 12 цифр, значит организация — индивидуальный предприниматель, и у нее нет КПП, значит поле КПП заполнять не нужно. И наоборот, если заполнено КПП, а ИНН указан 12-значный, возможно неверно указан ИНН.

Подсветка зависимых полей пропадает, как только пользователь начал исправлять значение в одном из этих полей.

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

Пример

Есть форма из 5 полей:

  • Название организации — простое текстовое, обязательное
  • ИНН — 10 или 12 цифр, проверка контрольной суммы по потере фокуса, обязательное
  • КПП — 9 цифр с проверкой контрольной суммы по потере фокуса, обязательное, если ИНН состоит из 10 цифр
  • Электронная почта — адрес почты, проверка по потере фокуса по маске a@a.aa, необязательное
  • Телефон — международный формат, проверка по потере фокуса по маске +00000000000, обязательное

Пользователь пропустил поле с названием организации, заполнил ИНН значением из 10 цифр, перешел в поле почты, указал некорректный адрес, перешел в поле с телефоном и указал некорректный номер, но из поля пока не ушел:

Пользователь навел курсор на поле с почтой, появился тултип. Но исправлять значение пользователь не стал:

Пользователь нажал кнопку «Отправить» — фокус перешел в поле «Название организации», так как оно обязательное и незаполненное:

Поле с телефоном также подсветилось красным, так как заполнено некорректно. ИНН и КПП подсветились, так как ИНН состоит из 10 цифр, значит должен быть заполнен и КПП — валидация зависимых полей произошла только после отправки формы.

Пользователь начинает вводить название организации, подсветка поля гаснет, а текст подсказки остается:

Заполнил название организации, перешел в поле ИНН:

Понял, что ИНН правильный, и нужно заполнить КПП:

Начал заполнять поле КПП. Красная рамка у ИНН и КПП исчезла — пользователь изменил значение в одном из зависимых полей:

Заполнил КПП, перешел в следующее поле:

Исправил почту, перешел в следующее поле:

Исправил телефон, кликнул за пределами поля:

Теперь по нажатию кнопки «Отправить» все будет хорошо.

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

Используем CSS

В CSS существует четыре специальных псевдокласса, применимых к полям формы: :valid (валидное поле), :invalid (невалидное), :required (обязательное) и :optional (необязательное). Их можно использовать, чтобы добавлять некоторые — хотя и весьма ограниченные — подсказки пользователям, заполняющим форму.

Используя :valid и :invalid, мы можем показать пользователю, правильно ли заполнено поле по мере ввода.

Стилизация псевдоклассов :valid и :invalid

Стилизация псевдоклассов :valid и :invalid

Однако с этим способом связана одна проблема: стили применяются до того, как пользователь начнёт работу с формой. Поля, обязательные для заполнения, сразу подсветятся нам как :invalid, а необязательные — как :valid. Это значит, что пользователь, даже не приступив к заполнению формы, может сразу же получить негативную обратную связь. Не очень-то хорошо.

Стилизация состояний :required и :optional сама по себе не особо полезна, поскольку эта информация обычно указывается в подписях к полям формы. Однако мы можем объединить эти состояния с псевдоклассами :valid / :invalid и стилизовать их комбинации. Например, мы хотим показывать лишь положительный результат, когда валидно обязательное к заполнению поле.

Стилизация по :valid и :required

Стилизация по :valid и :required

Используем JavaScript

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

Устанавливая атрибуты min, max и step, мы можем быть уверены в правильности значения только тогда, когда пользователь использует специальные контролы числового поля. Но что мешает пользователю ввести вручную некорректные данные? Вот что произойдёт, если он вставит 1, 12 и 123 в три поля и отправит форму:

Стандартный тултип валидации

Стандартный тултип валидации

В результате всё, что получит пользователь — это сообщение об ошибке для первого поля. Кроме того, в этом сообщении будет указано лишь одно несоответствие из двух требуемых. Такое поведение можно исправить, изменяя показываемые валидатором сообщения.

Добавляем несколько сообщений об ошибках в один тултип

Валидируя поля, браузер проверяет их по определённому списку потенциальных ошибок. В каждом поле содержится специальный объект validity, включающий в себя список булевых значений, характеризующих ту или иную проверку на валидность. Например, вот такой validity-объект будет у поля, когда пользователь введёт в него 1:

Примечание переводчика: Слово «mismatch» переводится как «несоответствие». Поэтому в значениях patternMismatch, stepMismatch и typeMismatch обратная логика: true — значение не удовлетворяет атрибуту, false — удовлетворяет.

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

Теперь при попытке отправить форму мы увидим вот это:

Отображаем несколько ошибок в одном тултипе

Отображаем несколько ошибок в одном тултипе

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

Это ограничение валидации, устанавливаемое браузером. Чтобы его побороть, нам нужно пойти другим путём.

Показываем все ошибки для всех полей

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

Этого можно добиться какой-то парой дополнительных строчек в нашем коде:

Вот что происходит при клике на submit теперь:

Отображаем все ошибки для всех полей в DOM

Отображаем все ошибки для всех полей в DOM

Используем нестандартные проверки валидности

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

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

Валидация в реальном времени

Хотя текущий способ выглядит намного лучше, он тоже не без изъянов. Наихудший из недочётов заключается в том, что пользователь не сможет увидеть никаких сообщений, пока не нажмёт на кнопку отправки формы. Было бы гораздо лучше, если бы валидация поля происходила сразу же при его заполнении. Можно выделить три правила для того, чтобы с формой было удобно работать:

  1. Требования для каждого поля чётко видны до того, как пользователь начал печатать.
  2. Как только пользователь начинает вводить данные, соблюдая требования, он сразу видит индикатор успешного заполнения поля или подсказки, если есть ошибки.
  3. Нужно отображать сообщения об ошибках таким образом, чтобы пользователь не мог отправить некорректно заполненную форму.

Пример валидации в реально времени

Пример валидации в реально времени

Если вы хотите попробовать свои силы (и даже сделать получше), вы можете воспользоваться вот этим шаблоном.

Laravel 9 · Валидация

  • Введение
  • Быстрый старт
    • Определение маршрутов
    • Создание контроллера
    • Написание логики валидации
    • Отображение ошибок валидации
    • Повторное заполнение форм
    • Примечание о необязательных полях
    • Формат ответа ошибок валидации
  • Валидация запроса формы
    • Создание запросов формы
    • Авторизация запросов
    • Корректировка сообщений об ошибках
    • Подготовка входящих данных для валидации
  • Создание валидатора по требованию
    • Автоматическое перенаправление
    • Именованные коллекции ошибок
    • Корректировка сообщений об ошибках
    • Хук валидатора After
  • Работа с провалидированными входящими данными
  • Работа с сообщениями об ошибках
    • Указание пользовательских сообщений в языковых файлах
    • Указание атрибутов в языковых файлах
    • Указание пользовательских имен для атрибутов в языковых файлах
  • Доступные правила валидации
  • Условное добавление правил
  • Валидация массивов
    • Валидация вложенных массивов
    • Индексы и позиции сообщений об ошибках
  • Валидация паролей
  • Пользовательские правила валидации
    • Использование класса Rule
    • Использование замыканий
    • Неявные правила

Введение

Laravel предлагает несколько подходов для проверки входящих данных вашего приложения. Например, метод validate, доступен для всех входящих HTTP-запросов. Однако мы обсудим и другие подходы к валидации.

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

Быстрый старт

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

Определение маршрутов

Во-первых, предположим, что в нашем файле routes/web.php определены следующие маршруты:

use AppHttpControllersPostController;

Route::get('/post/create', [PostController::class, 'create']);
Route::post('/post', [PostController::class, 'store']);

Маршрут GET отобразит форму для пользователя для создания нового сообщения в блоге, а маршрут POST сохранит новое сообщение в базе данных.

Создание контроллера

Затем, давайте взглянем на простой контроллер, который обрабатывает входящие запросы на эти маршруты. Пока оставим метод store пустым:

<?php

namespace AppHttpControllers;

use AppHttpControllersController;
use IlluminateHttpRequest;

class PostController extends Controller
{
    /**
     * Показать форму для создания нового сообщения в блоге.
     *
     * @return IlluminateViewView
     */
    public function create()
    {
        return view('post.create');
    }

    /**
     * Сохранить новую запись в блоге.
     *
     * @param  IlluminateHttpRequest  $request
     * @return IlluminateHttpResponse
     */
    public function store(Request $request)
    {
        // Выполнить валидацию и сохранить сообщение в блоге ...
    }
}

Написание логики валидации

Теперь мы готовы заполнить наш метод store логикой для валидации нового сообщения в блоге. Для этого мы будем использовать метод validate, предоставляемый объектом IlluminateHttpRequest. Если правила валидации будут пройдены, то ваш код продолжит нормально выполняться; однако, если проверка не пройдена, то будет выброшено исключение IlluminateValidationValidationException, и соответствующий ответ об ошибке будет автоматически отправлен обратно пользователю.

Если валидации не пройдена во время традиционного HTTP-запроса, то будет сгенерирован ответ-перенаправление на предыдущий URL-адрес. Если входящий запрос является XHR-запросом, то будет возвращен JSON-ответ, содержащий сообщения об ошибках валидации.

Чтобы лучше понять метод validate, давайте вернемся к методу store:

/**
 * Сохранить новую запись в блоге.
 *
 * @param  IlluminateHttpRequest  $request
 * @return IlluminateHttpResponse
 */
public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    // Запись блога корректна ...
}

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

В качестве альтернативы правила валидации могут быть указаны как массивы правил вместо одной строки с разделителями |:

$validatedData = $request->validate([
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
]);

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

$validatedData = $request->validateWithBag('post', [
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
]);

Прекращение валидации при возникновении первой ошибки

По желанию можно прекратить выполнение правил валидации для атрибута после первой ошибки. Для этого присвойте атрибуту правило bail:

$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);

В этом примере, если правило unique для атрибута title не будет пройдено, то правило max не будет выполняться. Правила будут проверяться в порядке их назначения.

Примечание о вложенных атрибутах

Если входящий HTTP-запрос содержит данные «вложенных» полей, то вы можете указать эти поля в своих правилах валидации, используя «точечную нотацию»:

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'author.name' => 'required',
    'author.description' => 'required',
]);

С другой стороны, если имя вашего поля буквально содержит точку, то вы можете явно запретить ее интерпретацию как часть «точечной нотации», экранировав точку с помощью обратной косой черты:

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'v1.0' => 'required',
]);

Отображение ошибок валидации

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

Переменная $errors используется во всех шаблонах вашего приложения благодаря посреднику IlluminateViewMiddlewareShareErrorsFromSession, который включен в группу посредников web. Пока применяется этот посредник, в ваших шаблонах всегда будет доступна переменная $errors, что позволяет вам предполагать, что переменная $errors всегда определена и может безопасно использоваться. Переменная $errors будет экземпляром IlluminateSupportMessageBag. Для получения дополнительной информации о работе с этим объектом ознакомьтесь с его документацией.

Итак, в нашем примере пользователь будет перенаправлен на метод нашего контроллера create, в случае, если валидация завершится неудачно, что позволит нам отобразить сообщения об ошибках в шаблоне:

<!-- /resources/views/post/create.blade.php -->

<h1>Создание поста блога</h1>

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<!-- Форма для создания поста блога -->

Корректировка сообщений об ошибках

Каждое встроенное правило валидации Laravel содержит сообщение об ошибке, которое находится в файле lang/en/validation.php вашего приложения. В этом файле вы найдете запись о переводе для каждого правила валидации. Вы можете изменять или модифицировать эти сообщения в зависимости от потребностей вашего приложения.

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

XHR-запросы и валидация

В этом примере мы использовали традиционную форму для отправки данных в приложение. Однако, многие приложения получают запросы XHR с фронтенда с использованием JavaScript. При использовании метода validate, во время выполнения XHR-запроса, Laravel не будет генерировать ответ-перенаправление. Вместо этого Laravel генерирует JSON-ответ, содержащий все ошибки валидации. Этот ответ JSON будет отправлен с кодом 422 состояния HTTP.

Директива @error

Вы можете использовать директиву @error Blade, чтобы быстро определить, существуют ли сообщения об ошибках валидации для конкретного атрибута, включая сообщения об ошибках в именованной коллекции ошибок. В директиве @error вы можете вывести содержимое переменной $message для отображения сообщения об ошибке:

<!-- /resources/views/post/create.blade.php -->

<label for="title">Post Title</label>

<input id="title"
    type="text"
    name="title"
    class="@error('title') is-invalid @enderror">

@error('title')
    <div class="alert alert-danger">{{ $message }}</div>
@enderror

Если вы используете именованные коллекции ошибок, то вы можете передать имя коллекции в качестве второго аргумента директивы @error:

<input ... class="@error('title', 'post') is-invalid @enderror">

Повторное заполнение форм

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

Чтобы получить входные данные предыдущего запроса, вызовите метод old экземпляра IlluminateHttpRequest. Метод old извлечет ранее записанные входные данные из сессии:

$title = $request->old('title');

Laravel также содержит глобального помощника old. Если вы показываете входные данные прошлого запроса в шаблоне Blade, то удобнее использовать помощник old для повторного заполнения формы. Если для какого-то поля не были предоставлены данные в прошлом запросе, то будет возвращен null:

<input type="text" name="title" value="{{ old('title') }}">

Примечание о необязательных полях

По умолчанию Laravel содержит посредников AppHttpMiddlewareTrimStrings и AppHttpMiddlewareConvertEmptyStringsToNull в глобальном стеке посредников вашего приложения. Эти посредники перечислены в классе AppHttpKernel. Первый из упомянутых посредников будет автоматически обрезать все входящие строковые поля запроса, а второй – конвертировать любые пустые строковые поля в null. Из-за этого вам часто нужно будет помечать ваши «необязательные» поля запроса как nullable, если вы не хотите, чтобы валидатор не считал такие поля недействительными. Например:

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    'publish_at' => 'nullable|date',
]);

В этом примере мы указываем, что поле publish_at может быть либо null, либо допустимым представлением даты. Если модификатор nullable не добавлен в определение правила, валидатор сочтет null недопустимой датой.

Формат ответа ошибок валидации

Когда ваше приложение выбрасывает исключение IlluminateValidationValidationException и на входящий HTTP-запрос ожидается ответ JSON, то Laravel автоматически отформатирует для вас сообщения об ошибках и вернет HTTP-ответ 422 Unprocessable Entity.

Ниже вы можете просмотреть пример формата ответа JSON для ошибок валидации. Обратите внимание, что вложенные ключи ошибок сведены к «точечной» нотации:

{
    "message": "The team name must be a string. (and 4 more errors)",
    "errors": {
        "team_name": [
            "The team name must be a string.",
            "The team name must be at least 1 characters."
        ],
        "authorization.role": [
            "The selected authorization.role is invalid."
        ],
        "users.0.email": [
            "The users.0.email field is required."
        ],
        "users.2.email": [
            "The users.2.email must be a valid email address."
        ]
    }
}

Валидация запроса формы

Создание запросов формы

Для более сложных сценариев валидации вы можете создать «запрос формы». Запрос формы – это ваш класс запроса, который инкапсулирует свою собственную логику валидации и авторизации. Чтобы сгенерировать новый запрос формы, используйте команду make:request Artisan:

php artisan make:request StorePostRequest

Эта команда поместит новый класс запроса формы в каталог app/Http/Requests вашего приложения. Если этот каталог не существует в вашем приложении, то Laravel предварительно создаст его, когда вы запустите команду make:request. Каждый запрос формы, созданный Laravel, имеет два метода: authorize и rules.

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

/**
 * Получить массив правил валидации, которые будут применены к запросу.
 *
 * @return array
 */
public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

Примечание
Вы можете объявить любые зависимости, которые вам нужны, в сигнатуре метода rules. Они будут автоматически извлечены через контейнер служб Laravel.

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

/**
 * Сохранить новую запись в блоге.
 *
 * @param  AppHttpRequestsStorePostRequest  $request
 * @return IlluminateHttpResponse
 */
public function store(StorePostRequest $request)
{
    // Входящий запрос прошел валидацию ...

    // Получить провалидированные входные данные ...
    $validated = $request->validated();

    // Получить часть провалидированных входных данных ...
    $validated = $request->safe()->only(['name', 'email']);
    $validated = $request->safe()->except(['name', 'email']);
}

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

Добавление хуков after для запросов форм

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

/**
 * Надстройка экземпляра валидатора.
 *
 * @param  IlluminateValidationValidator  $validator
 * @return void
 */
public function withValidator($validator)
{
    $validator->after(function ($validator) {
        if ($this->somethingElseIsInvalid()) {
            $validator->errors()->add('field', 'Что-то не так с этим полем!');
        }
    });
}

Прекращение валидации после первой неуспешной проверки

Добавив свойство $stopOnFirstFailure вашему классу запроса, вы можете сообщить валидатору, что он должен прекратить валидацию всех атрибутов после возникновения первой ошибки валидации:

/**
 * Остановить валидацию после первой неуспешной проверки.
 *
 * @var bool
 */
protected $stopOnFirstFailure = true;

Изменение адреса ответа-перенаправления

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

/**
 * URI перенаправления пользователей в случае неуспешной валидации.
 *
 * @var string
 */
protected $redirect = '/dashboard';

Или, если вы хотите перенаправить пользователей на именованный маршрут, то вы можете вместо этого определить свойство $redirectRoute:

/**
 * Маршрут перенаправления пользователей в случае неуспешной валидации.
 *
 * @var string
 */
protected $redirectRoute = 'dashboard';

Авторизация запросов

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

use AppModelsComment;

/**
 * Определить, уполномочен ли пользователь выполнить этот запрос.
 *
 * @return bool
 */
public function authorize()
{
    $comment = Comment::find($this->route('comment'));

    return $comment && $this->user()->can('update', $comment);
}

Поскольку все запросы формы расширяют базовый класс запросов Laravel, мы можем использовать метод user для доступа к текущему аутентифицированному пользователю. Также обратите внимание на вызов метода route в приведенном выше примере. Этот метод обеспечивает вам доступ к параметрам URI, определенным для вызываемого маршрута, таким как параметр {comment} в приведенном ниже примере:

Route::post('/comment/{comment}');

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

return $this->user()->can('update', $this->comment);

Если метод authorize возвращает false, то будет автоматически возвращен HTTP-ответ с кодом состояния 403, и метод вашего контроллера не будет выполнен.

Если вы планируете обрабатывать логику авторизации для запроса в другой части вашего приложения, то вы можете просто вернуть true из метода authorize:

/**
 * Определить, уполномочен ли пользователь выполнить этот запрос.
 *
 * @return bool
 */
public function authorize()
{
    return true;
}

Примечание
Вы можете объявить любые зависимости, которые вам нужны, в сигнатуре метода authorize. Они будут автоматически извлечены через контейнер служб Laravel.

Корректировка сообщений об ошибках

Вы можете изменить сообщения об ошибках, используемые в запросе формы, переопределив метод messages. Этот метод должен возвращать массив пар атрибут / правило и соответствующие им сообщения об ошибках:

/**
 * Получить сообщения об ошибках для определенных правил валидации.
 *
 * @return array
 */
public function messages()
{
    return [
        'title.required' => 'A title is required',
        'body.required' => 'A message is required',
    ];
}

Корректировка атрибутов валидации

Многие сообщения об ошибках встроенных правил валидации Laravel содержат заполнитель :attribute. Если вы хотите, чтобы заполнитель :attribute вашего сообщения валидации был заменен другим именем атрибута, то вы можете указать собственные имена, переопределив метод attributes. Этот метод должен возвращать массив пар атрибут / имя:

/**
 * Получить пользовательские имена атрибутов для формирования ошибок валидатора.
 *
 * @return array
 */
public function attributes()
{
    return [
        'email' => 'email address',
    ];
}

Подготовка входящих данных для валидации

Если вам необходимо подготовить или обработать какие-либо данные из запроса перед применением правил валидации, то вы можете использовать метод prepareForValidation:

use IlluminateSupportStr;

/**
 * Подготовить данные для валидации.
 *
 * @return void
 */
protected function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->slug),
    ]);
}

Создание валидатора по требованию

Если вы не хотите использовать метод validate запроса, то вы можете создать экземпляр валидатора вручную, используя фасад Validator. Метод make фасада генерирует новый экземпляр валидатора:

<?php

namespace AppHttpControllers;

use AppHttpControllersController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;

class PostController extends Controller
{
    /**
     * Сохранить новую запись в блоге.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                        ->withErrors($validator)
                        ->withInput();
        }

        // Получить провалидированные входные данные ...
        $validated = $validator->validated();

        // Получить часть провалидированных входных данных ...
        $validated = $validator->safe()->only(['name', 'email']);
        $validated = $validator->safe()->except(['name', 'email']);

        // Сохранить сообщение блога ...
    }
}

Первым аргументом, переданным методу make, являются проверяемые данные. Второй аргумент – это массив правил валидации, которые должны применяться к данным.

После определения того, что запрос не прошел валидацию с помощью метода fails, вы можете использовать метод withErrors для передачи сообщений об ошибках в сессию. При использовании этого метода переменная $errors будет автоматически передана вашим шаблонам после перенаправления, что позволит вам легко отобразить их обратно пользователю. Метод withErrors принимает экземпляр валидатора, экземпляр MessageBag или обычный массив PHP.

Прекращение валидации после первой неуспешной проверки

Метод stopOnFirstFailure проинформирует валидатор о том, что он должен прекратить валидацию всех атрибутов после возникновения первой ошибки валидации:

if ($validator->stopOnFirstFailure()->fails()) {
    // ...
}

Автоматическое перенаправление

Если вы хотите создать экземпляр валидатора вручную, но по-прежнему воспользоваться преимуществами автоматического перенаправления, предлагаемого методом validate HTTP-запроса, вы можете вызвать метод validate созданного экземпляра валидатора. Пользователь будет автоматически перенаправлен или, в случае запроса XHR, будет возвращен ответ JSON, если валидация будет не успешной:

Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
])->validate();

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

Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
])->validateWithBag('post');

Именованные коллекции ошибок

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

return redirect('register')->withErrors($validator, 'login');

Затем, вы можете получить доступ к именованному экземпляру MessageBag из переменной $errors:

{{ $errors->login->first('email') }}

Корректировка сообщений об ошибках

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

$validator = Validator::make($input, $rules, $messages = [
    'required' => 'The :attribute field is required.',
]);

В этом примере заполнитель :attribute будет заменен фактическим именем проверяемого поля. Вы также можете использовать другие заполнители в сообщениях валидатора. Например:

$messages = [
    'same' => 'The :attribute and :other must match.',
    'size' => 'The :attribute must be exactly :size.',
    'between' => 'The :attribute value :input is not between :min - :max.',
    'in' => 'The :attribute must be one of the following types: :values',
];

Указание пользовательского сообщения для конкретного атрибута

По желанию можно указать собственное сообщение об ошибке только для определенного атрибута. Вы можете сделать это, используя «точечную нотацию». Сначала укажите имя атрибута, а затем правило:

$messages = [
    'email.required' => 'We need to know your email address!',
];

Указание пользовательских имен для атрибутов

Многие сообщения об ошибках встроенных правил валидации Laravel содержат заполнитель :attribute, который заменяется именем проверяемого поля или атрибута. Чтобы указать собственные значения, используемые для замены этих заполнителей для конкретных полей, вы можете передать массив ваших атрибутов в качестве четвертого аргумента методу Validator::make:

$validator = Validator::make($input, $rules, $messages, [
    'email' => 'email address',
]);

Хук валидатора After

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

$validator = Validator::make(/* ... */);

$validator->after(function ($validator) {
    if ($this->somethingElseIsInvalid()) {
        $validator->errors()->add(
            'field', 'Something is wrong with this field!'
        );
    }
});

if ($validator->fails()) {
    //
}

Работа с провалидированными входящими данными

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

$validated = $request->validated();

$validated = $validator->validated();

В качестве альтернативы вы можете вызвать метод safe запроса формы или экземпляра валидатора. Этот метод возвращает экземпляр IlluminateSupportValidatedInput. Этот объект предоставляет методы only, except и all для получения как подмножества, так и целого массива провалидированных данных:

$validated = $request->safe()->only(['name', 'email']);

$validated = $request->safe()->except(['name', 'email']);

$validated = $request->safe()->all();

Кроме того, экземпляр IlluminateSupportValidatedInput может быть итерирован и доступен как массив:

// Провалидированные данные могут быть итерированы ...
foreach ($request->safe() as $key => $value) {
    //
}

// К провалидированным данным можно получить доступ как к массиву ...
$validated = $request->safe();

$email = $validated['email'];

Если вы хотите добавить дополнительные поля к провалидированные данным, то вы можете вызвать метод merge:

$validated = $request->safe()->merge(['name' => 'Taylor Otwell']);

Если вы хотите получить провалидированные данные как экземпляр коллекции, то вы можете вызвать метод collect:

$collection = $request->safe()->collect();

Работа с сообщениями об ошибках

После вызова метода errors экземпляр Validator, вы получите экземпляр IlluminateSupportMessageBag, который имеет множество удобных методов для работы с сообщениями об ошибках. Переменная $errors, которая автоматически становится доступной для всех шаблонов, также является экземпляром класса MessageBag.

Получение первого сообщения об ошибке для поля

Чтобы получить первое сообщение об ошибке для указанного поля, используйте метод first:

$errors = $validator->errors();

echo $errors->first('email');

Получение всех сообщений об ошибках для поля

Если вам нужно получить массив всех сообщений для указанного поля, используйте метод get:

foreach ($errors->get('email') as $message) {
    //
}

Если вы проверяете массив полей формы, то вы можете получить все сообщения для каждого из элементов массива, используя символ *:

foreach ($errors->get('attachments.*') as $message) {
    //
}

Получение всех сообщений об ошибках для всех полей

Чтобы получить массив всех сообщений для всех полей, используйте метод all:

foreach ($errors->all() as $message) {
    //
}

Определение наличия сообщений для поля

Метод has используется для определения наличия сообщений об ошибках для указанного поля:

if ($errors->has('email')) {
    //
}

Указание пользовательских сообщений в языковых файлах

Каждое встроенное правило валидации Laravel содержит сообщение об ошибке, которое находится в файле lang/en/validation.php вашего приложения. В этом файле вы найдете запись о переводе для каждого правила валидации. Вы можете изменять или модифицировать эти сообщения в зависимости от потребностей вашего приложения.

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

Указание пользовательского сообщения для конкретного атрибута

Вы можете изменить сообщения об ошибках, используемые для указанных комбинаций атрибутов и правил в языковых файлах валидации вашего приложения. Для этого добавьте собственные сообщения в массив custom языкового файла lang/xx/validation.php вашего приложения:

'custom' => [
    'email' => [
        'required' => 'We need to know your email address!',
        'max' => 'Your email address is too long!'
    ],
],

Указание атрибутов в языковых файлах

Многие сообщения об ошибках встроенных правил валидации Laravel содержат заполнитель :attribute, который заменяется именем проверяемого поля или атрибута. Если вы хотите, чтобы часть :attribute вашего сообщения валидации была заменена собственным значением, то вы можете указать имя настраиваемого атрибута в массиве attributes вашего языкового файла lang/xx/validation.php:

'attributes' => [
    'email' => 'email address',
],

Указание пользовательских имен для атрибутов в языковых файлах

Некоторые сообщения об ошибках встроенных правил валидации Laravel содержат заполнитель :value, который заменяется текущим значением атрибута запроса. Иногда требуется заменить часть :value вашего сообщения валидации на собственное значение. Например, рассмотрим следующее правило, которое указывает, что номер кредитной карты требуется обязательно, если для параметра payment_type установлено значение cc:

Validator::make($request->all(), [
    'credit_card_number' => 'required_if:payment_type,cc'
]);

Если это правило валидации не будет пройдено, то будет выдано следующее сообщение об ошибке:

The credit card number field is required when payment type is cc.

Вместо того, чтобы отображать cc в качестве значения типа платежа, вы можете указать более удобное для пользователя представление значения в вашем языковом файле lang/xx/validation.php, определив массив values:

'values' => [
    'payment_type' => [
        'cc' => 'credit card'
    ],
],

После определения этого значения правило валидации выдаст следующее сообщение об ошибке:

The credit card number field is required when payment type is credit card.

Доступные правила валидации

Ниже приведен список всех доступных правил валидации и их функций:

  • Accepted
  • Accepted If
  • Active URL
  • After (Date)
  • After Or Equal (Date)
  • Alpha
  • Alpha Dash
  • Alpha Numeric
  • Array
  • Bail
  • Before (Date)
  • Before Or Equal (Date)
  • Between
  • Boolean
  • Confirmed
  • Current Password
  • Date
  • Date Equals
  • Date Format
  • Declined
  • Declined If
  • Different
  • Digits
  • Digits Between
  • Dimensions (Image Files)
  • Distinct
  • Email
  • Ends With
  • Enum
  • Exclude
  • Exclude If
  • Exclude Unless
  • Exclude With
  • Exclude Without
  • Exists (Database)
  • File
  • Filled
  • Greater Than
  • Greater Than Or Equal
  • Image (File)
  • In
  • In Array
  • Integer
  • IP Address
  • JSON
  • Less Than
  • Less Than Or Equal
  • MAC Address
  • Max
  • MIME Types
  • MIME Type By File Extension
  • Min
  • Multiple Of
  • Not In
  • Not Regex
  • Nullable
  • Numeric
  • Password
  • Present
  • Prohibited
  • Prohibited If
  • Prohibited Unless
  • Prohibits
  • Regex (regular expression)
  • Required
  • Required If
  • Required Unless
  • Required With
  • Required With All
  • Required Without
  • Required Without All
  • Required Array Keys
  • Same
  • Size
  • Sometimes
  • Starts With
  • String
  • Timezone
  • Unique (Database)
  • URL
  • UUID

accepted

Проверяемое поле должно иметь значение "yes", "on", 1 или true. Применяется для валидации принятия раздела «Условия использования» или аналогичных полей.

accepted_if:anotherfield,value,…

Проверяемое поле должно иметь значение "yes", "on", 1 или true, если другое проверяемое поле равно указанному значению. Применяется для валидации принятия раздела «Условия использования» или аналогичных полей.

active_url

Проверяемое поле должно иметь допустимую запись A или AAAA в соответствии с функцией dns_get_record PHP. Имя хоста указанного URL извлекается с помощью PHP-функции parse_url перед передачей в dns_get_record.

after:date

Проверяемое поле должно иметь значение после указанной даты. Даты будут переданы в функцию strtotime PHP для преобразования в действительный экземпляр DateTime:

'start_date' => 'required|date|after:tomorrow'

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

'finish_date' => 'required|date|after:start_date'

after_or_equal:date

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

alpha

Проверяемое поле должно состоять полностью из букв.

alpha_dash

Проверяемое поле может содержать буквенно-цифровые символы, а также дефисы и подчеркивания.

alpha_num

Проверяемое поле должно состоять полностью из буквенно-цифровых символов.

array

Проверяемое поле должно быть массивом PHP.

Когда для правила array предоставляются дополнительные значения, каждый ключ во входном массиве должен присутствовать в списке значений, предоставленных правилу. В следующем примере ключ admin во входном массиве является недействительным, так как он не содержится в списке значений, предоставленных правилу array:

use IlluminateSupportFacadesValidator;

$input = [
    'user' => [
        'name' => 'Taylor Otwell',
        'username' => 'taylorotwell',
        'admin' => true,
    ],
];

Validator::make($input, [
    'user' => 'array:username,locale',
]);

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

bail

Остановить дальнейшее применение правил валидации атрибута после первой неуспешной проверки.

В отличии от правила bail, которое прекращает дальнейшую валидацию только конкретного поля, метод stopOnFirstFailure сообщит валидатору, что он должен прекратить дальнейшую валидацию всех атрибутов при возникновении первой ошибке:

if ($validator->stopOnFirstFailure()->fails()) {
    // ...
}

before:date

Проверяемое поле должно быть значением, предшествующим указанной дате. Даты будут переданы в функцию PHP strtotime для преобразования в действительный экземпляр DateTime. Кроме того, как и в правиле after, имя другого проверяемого поля может быть указано в качестве значения date.

before_or_equal:date

Проверяемое поле должно иметь значение, предшествующее указанной дате или равное ей. Даты будут переданы в функцию PHP strtotime для преобразования в действительный экземпляр DateTime. Кроме того, как и в правиле after, имя другого проверяемого поля может быть указано в качестве значения date.

between:min,max

Проверяемое поле должно иметь размер между указанными min и max. Строки, числа, массивы и файлы оцениваются так же, как и в правиле size.

boolean

Проверяемое поле должно иметь возможность преобразования в логическое значение. Допустимые значения: true, false, 1, 0, "1" и "0".

confirmed

Проверяемое поле должно иметь совпадающее поле {field}_confirmation. Например, если проверяемое поле – password, то поле password_confirmation также должно присутствовать во входящих данных.

current_password

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

'password' => 'current_password:api'

date

Проверяемое поле должно быть действительной, не относительной датой в соответствии с функцией strtotime PHP.

date_equals:date

Проверяемое поле должно быть равно указанной дате. Даты будут переданы в функцию strtotime PHP для преобразования в действительный экземпляр DateTime.

date_format:format

Проверяемое поле должно соответствовать переданному format. При валидации поля следует использовать либо date, либо date_format, а не то и другое вместе. Это правило валидации поддерживает все форматы, поддерживаемые классом DateTime PHP.

declined

Проверяемое поле должно иметь значение "no", "off", 0 или false.

declined_if:anotherfield,value,…

Проверяемое поле должно иметь значение "no", "off", 0 или false, если другое проверяемое поле равно указанному значению.

different:field

Проверяемое поле должно иметь значение, отличное от field.

digits:value

Проверяемое целое число должно иметь точную длину value.

digits_between:min,max

Проверяемое целое число должно иметь длину между переданными min и max.

dimensions

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

'avatar' => 'dimensions:min_width=100,min_height=200'

Доступные ограничения: min_width, max_width, min_height, max_height, width, height, ratio.

Ограничение ratio должно быть представлено как ширина, разделенная на высоту. Это может быть указано дробью вроде 3/2 или числом с плавающей запятой, например 1.5:

'avatar' => 'dimensions:ratio=3/2'

Поскольку это правило требует нескольких аргументов, вы можете использовать метод Rule::dimensions для гибкости составления правила:

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

Validator::make($data, [
    'avatar' => [
        'required',
        Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2),
    ],
]);

distinct

При валидации массивов проверяемое поле не должно иметь повторяющихся значений:

По умолчанию правило distinct использует гибкое сравнение переменных. Чтобы использовать жесткое сравнение, вы можете добавить параметр strict в определение правила валидации:

'foo.*.id' => 'distinct:strict'

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

'foo.*.id' => 'distinct:ignore_case'

email

Проверяемое поле должно быть отформатировано как адрес электронной почты. Это правило валидации использует пакет egulias/email-validator для проверки адреса электронной почты. По умолчанию применяется валидатор RFCValidation, но вы также можете применить другие стили валидации:

'email' => 'email:rfc,dns'

В приведенном выше примере будут применяться проверки RFCValidation и DNSCheckValidation. Вот полный список стилей проверки, которые вы можете применить:

  • rfc: RFCValidation
  • strict: NoRFCWarningsValidation
  • dns: DNSCheckValidation
  • spoof: SpoofCheckValidation
  • filter: FilterEmailValidation

Валидатор filter, который использует функцию filter_var PHP, поставляется с Laravel и применялся по умолчанию до Laravel версии 5.8.

Предупреждение
Валидаторы dns и spoof требуют расширения intl PHP.

ends_with:foo,bar,…

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

enum

Правило Enum – это правило на основе класса, которое определяет, имеет ли проверяемое поле допустимое значение перечисления. Правило Enum принимает имя перечисления как единственный аргумент конструктора:

use AppEnumsServerStatus;
use IlluminateValidationRulesEnum;

$request->validate([
    'status' => [new Enum(ServerStatus::class)],
]);

Предупреждение
Перечисляемые типы доступны только в PHP 8.1+.

exclude

Проверяемое поле будет исключено из данных запроса, возвращаемых методами validate и validated.

exclude_if:anotherfield,value

Проверяемое поле будет исключено из данных запроса, возвращаемых методами validate и validated, если поле anotherfield равно value.

Если требуется сложная логика условного исключения, то вы можете использовать метод Rule::excludeIf. Этот метод принимает логическое значение или замыкание. При задании замыкания оно должно возвращать true или false для указания, следует ли исключить проверяемое поле:

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

Validator::make($request->all(), [
    'role_id' => Rule::excludeIf($request->user()->is_admin),
]);

Validator::make($request->all(), [
    'role_id' => Rule::excludeIf(fn () => $request->user()->is_admin),
]);

exclude_unless:anotherfield,value

Проверяемое поле будет исключено из данных запроса, возвращаемых методами validate и validated, если поле anotherfield не равно value. Если value равно null (т.е. exclude_unless:name,null), то проверяемое поле будет исключено, если поле сравнения не имеет значение null или поле сравнения отсутствует в данных запроса.

exclude_with:anotherfield

Проверяемое поле будет исключено из данных запроса, возвращаемых методами validate и validated, если присутствует поле anotherfield.

exclude_without:anotherfield

Проверяемое поле будет исключено из данных запроса, возвращаемых методами validate и validated, если поле anotherfield отсутствует.

exists:table,column

Проверяемое поле должно существовать в указанной таблице базы данных.

Основы использования правила Exists

'state' => 'exists:states'

Если параметр column не указан, будет использоваться имя поля. Таким образом, в этом случае правило будет проверять, что таблица базы данных states содержит запись со значением столбца state, соответствующим значению атрибута state запроса.

Указание пользовательского имени столбца

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

'state' => 'exists:states,abbreviation'

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

'email' => 'exists:connection.staff,email'

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

'user_id' => 'exists:AppModelsUser,id'

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

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::exists('staff')->where(function ($query) {
            return $query->where('account_id', 1);
        }),
    ],
]);

Вы можете явно указать имя столбца базы данных, которое должно использоваться правилом exists, сгенерированным методом Rule::exists, указав имя столбца в качестве второго аргумента метода exists:

'state' => Rule::exists('states', 'abbreviation'),

file

Проверяемое поле должно быть успешно загруженным на сервер файлом.

filled

Проверяемое поле не должно быть пустым, если оно присутствует.

gt:field

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

gte:field

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

image

Проверяемый файл должен быть изображением (jpg, jpeg, png, bmp, gif, svg или webp).

in:foo,bar,…

Проверяемое поле должно быть включено в указанный список значений. Поскольку это правило часто требует, чтобы вы «объединяли» массив, то метод Rule::in можно использовать для гибкого построения правила:

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

Validator::make($data, [
    'zones' => [
        'required',
        Rule::in(['first-zone', 'second-zone']),
    ],
]);

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

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

$input = [
    'airports' => ['NYC', 'LAS'],
];

Validator::make($input, [
    'airports' => [
        'required',
        'array',
    ],
    'airports.*' => Rule::in(['NYC', 'LIT']),
]);

in_array:anotherfield.*

Проверяемое поле должно существовать в значениях anotherfield.

integer

Проверяемое поле должно быть целым числом.

Предупреждение
Это правило валидации не проверяет, что значение поля относится к типу переменной integer, а только что значение поля относится к типу, принятому правилом FILTER_VALIDATE_INT PHP. Если вам нужно проверить значение поля в качестве числа, используйте это правило в сочетании с правилом валидации numeric.

ip

Проверяемое поле должно быть IP-адресом.

ipv4

Проверяемое поле должно быть адресом IPv4.

ipv6

Проверяемое поле должно быть адресом IPv6.

json

Проверяемое поле должно быть допустимой строкой JSON.

lt:field

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

lte:field

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

mac_address

Проверяемое поле должно быть MAC-адресом.

max:value

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

mimetypes:text/plain,…

Проверяемый файл должен соответствовать одному из указанных MIME-типов:

'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'

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

mimes:foo,bar,…

Проверяемый файл должен иметь MIME-тип, соответствующий одному из перечисленных расширений.

Основы использования правила MIME

'photo' => 'mimes:jpg,bmp,png'

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

https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

min:value

Проверяемое поле должно иметь минимальное значение value. Строки, числа, массивы и файлы оцениваются с использованием тех же соглашений, что и в правиле size.

multiple_of:value

Проверяемое поле должно быть кратным value.

Предупреждение
Для использования правила multiple_of требуется расширение bcmath PHP.

not_in:foo,bar,…

Проверяемое поле не должно быть включено в переданный список значений. Метод Rule::notIn используется для гибкого построения правила:

use IlluminateValidationRule;

Validator::make($data, [
    'toppings' => [
        'required',
        Rule::notIn(['sprinkles', 'cherries']),
    ],
]);

not_regex:pattern

Проверяемое поле не должно соответствовать переданному регулярному выражению.

Внутренне это правило использует функцию preg_match PHP. Указанный шаблон должен подчиняться тому же форматированию, требуемому preg_match, и, следовательно, также включать допустимые разделители. Например: 'email' => 'not_regex:/^.+$/i'.

Предупреждение
При использовании шаблонов regex / not_regex может потребоваться указать ваши правила валидации с использованием массива вместо использования разделителей |, особенно если регулярное выражение содержит символ |.

nullable

Проверяемое поле может быть null.

numeric

Проверяемое поле должно быть числовым.

password

Проверяемое поле должно соответствовать паролю аутентифицированного пользователя.

Предупреждение
Это правило было переименовано в current_password с его дальнейшим удалением в Laravel 9. Вместо этого используйте правило Current Password.

present

Проверяемое поле должно присутствовать во входных данных, но может быть пустым.

prohibited

Проверяемое поле должно быть пустым или отсутствовать.

prohibited_if:anotherfield,value,…

Проверяемое поле должно быть пустым или отсутствовать, если поле anotherfield равно любому value.

Если требуется сложная логика условного запрета присутствия, то вы можете использовать метод Rule::prohibitedIf. Этот метод принимает логическое значение или замыкание. При задании замыкания оно должно возвращать true или false для указания, следует ли запретить присутствие проверяемого поля:

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

Validator::make($request->all(), [
    'role_id' => Rule::prohibitedIf($request->user()->is_admin),
]);

Validator::make($request->all(), [
    'role_id' => Rule::prohibitedIf(fn () => $request->user()->is_admin),
]);

prohibited_unless:anotherfield,value,…

Проверяемое поле должно быть пустым или отсутствовать, если поле anotherfield не равно какому-либо value.

prohibits:anotherfield,…

Если проверяемое поле присутствует, никакие поля в anotherfield не могут присутствовать, даже если они пустые.

regex:pattern

Проверяемое поле должно соответствовать переданному регулярному выражению.

Внутренне это правило использует функцию preg_match PHP. Указанный шаблон должен подчиняться тому же форматированию, требуемому preg_match, и, следовательно, также включать допустимые разделители. Например: 'email' => 'regex:/^.+@.+$/i'.

Предупреждение
При использовании шаблонов regex / not_regex может потребоваться указать ваши правила валидации с использованием массива вместо использования разделителей |, особенно если регулярное выражение содержит символ |.

required

Проверяемое поле должно присутствовать во входных данных и не быть пустым. Поле считается «пустым», если выполняется одно из следующих условий:

  • Значение поля равно null.
  • Значение поля – пустая строка.
  • Значение поля представляет собой пустой массив или пустой объект, реализующий интерфейс Countable.
  • Значение поля – загружаемый файл, но без пути.

required_if:anotherfield,value,…

Проверяемое поле должно присутствовать и не быть пустым, если поле anotherfield равно любому value.

Если вы хотите создать более сложное условие для правила required_if, вы можете использовать метод Rule::requiredIf. Этот метод принимает логическое значение или замыкание. При выполнении замыкания оно должно возвращать true или false, чтобы указать, обязательно ли проверяемое поле:

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

Validator::make($request->all(), [
    'role_id' => Rule::requiredIf($request->user()->is_admin),
]);

Validator::make($request->all(), [
    'role_id' => Rule::requiredIf(fn () => $request->user()->is_admin),
]);

required_unless:anotherfield,value,…

Проверяемое поле должно присутствовать и не быть пустым, если поле anotherfield не равно какому-либо value. Это также означает, что в данных запроса должно присутствовать anotherfield, если value не имеет значения null. Если value равно null (т.е. required_unless:name,null), то проверяемое поле будет обязательным, если поле сравнения не равно null или поле сравнения отсутствует в данных запроса.

required_with:foo,bar,…

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

required_with_all:foo,bar,…

Проверяемое поле должно присутствовать и не быть пустым, только если все другие указанные поля присутствуют и не являются пустыми.

required_without:foo,bar,…

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

required_without_all:foo,bar,…

Проверяемое поле должно присутствовать и не быть пустым, только когда все другие указанные поля являются пустыми или отсутствуют.

required_array_keys:foo,bar,…

Проверяемое поле должно быть массивом и содержать как минимум указанные ключи.

same:field

Переданное field должно соответствовать проверяемому полю.

size:value

Проверяемое поле должно иметь размер, соответствующий переданному value. Для строковых данных value соответствует количеству символов. Для числовых данных value соответствует переданному целочисленному значению (атрибут также должен иметь правило numeric или integer). Для массива size соответствует count массива. Для файлов size соответствует размеру файла в килобайтах. Давайте посмотрим на несколько примеров:

// Проверяем, что строка содержит ровно 12 символов ...
'title' => 'size:12';

// Проверяем, что передано целое число, равно 10 ...
'seats' => 'integer|size:10';

// Проверяем, что в массиве ровно 5 элементов ...
'tags' => 'array|size:5';

// Проверяем, что размер загружаемого файла составляет ровно 512 килобайт ...
'image' => 'file|size:512';

starts_with:foo,bar,…

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

string

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

timezone

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

unique:table,column

Проверяемое поле не должно существовать в указанной таблице базы данных.

Указание пользовательского имени таблицы / имени столбца:

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

'email' => 'unique:AppModelsUser,email_address'

Параметр column используется для указания соответствующего столбца базы данных поля. Если опция column не указана, будет использоваться имя проверяемого поля.

'email' => 'unique:users,email_address'

Указание пользовательского соединения базы данных

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

'email' => 'unique:connection.users,email_address'

Принудительное игнорирование правилом Unique конкретного идентификатора:

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

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

use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

Validator::make($data, [
    'email' => [
        'required',
        Rule::unique('users')->ignore($user->id),
    ],
]);

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

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

Rule::unique('users')->ignore($user)

Если ваша таблица использует имя столбца с первичным ключом, отличное от id, то вы можете указать имя столбца при вызове метода ignore:

Rule::unique('users')->ignore($user->id, 'user_id')

По умолчанию правило unique проверяет уникальность столбца, совпадающего с именем проверяемого атрибута. Однако вы можете передать другое имя столбца в качестве второго аргумента метода unique:

Rule::unique('users', 'email_address')->ignore($user->id),

Добавление дополнительных выражений Where:

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

'email' => Rule::unique('users')->where(fn ($query) => $query->where('account_id', 1))

url

Проверяемое поле должно быть действительным URL.

uuid

Проверяемое поле должно быть действительным универсальным уникальным идентификатором (UUID) RFC 4122 (версии 1, 3, 4 или 5).

Условное добавление правил

Пропуск валидации при определенных значениях полей

По желанию можно не проверять конкретное поле, если другое поле имеет указанное значение. Вы можете сделать это, используя правило валидации exclude_if. В этом примере поля appointment_date и doctor_name не будут проверяться, если поле has_appointment имеет значение false:

use IlluminateSupportFacadesValidator;

$validator = Validator::make($data, [
    'has_appointment' => 'required|boolean',
    'appointment_date' => 'exclude_if:has_appointment,false|required|date',
    'doctor_name' => 'exclude_if:has_appointment,false|required|string',
]);

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

$validator = Validator::make($data, [
    'has_appointment' => 'required|boolean',
    'appointment_date' => 'exclude_unless:has_appointment,true|required|date',
    'doctor_name' => 'exclude_unless:has_appointment,true|required|string',
]);

Валидация при условии наличия

По желанию можно выполнить валидацию поля, только если это поле присутствует в проверяемых данных. Чтобы этого добиться, добавьте правило sometimes в свой список правил:

$validator = Validator::make($data, [
    'email' => 'sometimes|required|email',
]);

В приведенном выше примере поле email будет проверено, только если оно присутствует в массиве $request->all().

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

Комплексная условная проверка

Иногда вы можете добавить правила валидации, основанные на более сложной условной логике. Например, вы можете потребовать обязательного присутствия переданного поля только в том случае, если другое поле имеет значение больше 100. Или вам может потребоваться, чтобы два поля имели указанное значение только при наличии другого поля. Добавление этих правил валидации не должно вызывать затруднений. Сначала создайте экземпляр Validator со своими статическими правилами, которые будут неизменными:

use IlluminateSupportFacadesValidator;

$validator = Validator::make($request->all(), [
    'email' => 'required|email',
    'games' => 'required|numeric',
]);

Предположим, что наше веб-приложение предназначено для коллекционеров игр. Если коллекционер игр регистрируется в нашем приложении и у него есть более 100 игр, мы хотим, чтобы он объяснил, почему у него так много игр. Например, возможно, они владеют магазином по перепродаже игр или, может быть, им просто нравится коллекционировать игры. Чтобы условно добавить это требование, мы можем использовать метод sometimes экземпляра Validator:

$validator->sometimes('reason', 'required|max:500', function ($input) {
    return $input->games >= 100;
});

Первый аргумент, переданный методу sometimes – это имя поля, которое мы условно проверяем. Второй аргумент – это список правил, которые мы хотим добавить. Если замыкание, переданное в качестве третьего аргумента, возвращает true, то правила будут добавлены. Этот метод упрощает создание сложных условных проверок. Вы даже можете добавить условные проверки сразу для нескольких полей:

$validator->sometimes(['reason', 'cost'], 'required', function ($input) {
    return $input->games >= 100;
});

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

Комплексная условная валидация массива

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

$input = [
    'channels' => [
        [
            'type' => 'email',
            'address' => 'abigail@example.com',
        ],
        [
            'type' => 'url',
            'address' => 'https://example.com',
        ],
    ],
];

$validator->sometimes('channels.*.address', 'email', function ($input, $item) {
    return $item->type === 'email';
});

$validator->sometimes('channels.*.address', 'url', function ($input, $item) {
    return $item->type !== 'email';
});

Подобно параметру $input, переданному в замыкание, параметр $item будет являться экземпляром IlluminateSupportFluent, если атрибут данных является массивом; в противном случае – это строка.

Валидация массивов

Как обсуждалось в правилах валидации массива, правило array принимает список разрешенных ключей массива. Если в массиве присутствуют какие-либо дополнительные ключи, проверка не будет пройдена:

use IlluminateSupportFacadesValidator;

$input = [
    'user' => [
        'name' => 'Taylor Otwell',
        'username' => 'taylorotwell',
        'admin' => true,
    ],
];

Validator::make($input, [
    'user' => 'array:username,locale',
]);

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

Валидация вложенных массивов

Проверка полей ввода формы на основе массива не должна быть проблемой. Вы можете использовать «точечную нотацию» для валидации атрибутов в массиве. Например, если входящий HTTP-запрос содержит поле photos[profile], вы можете проверить его следующим образом:

use IlluminateSupportFacadesValidator;

$validator = Validator::make($request->all(), [
    'photos.profile' => 'required|image',
]);

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

$validator = Validator::make($request->all(), [
    'person.*.email' => 'email|unique:users',
    'person.*.first_name' => 'required_with:person.*.last_name',
]);

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

'custom' => [
    'person.*.email' => [
        'unique' => 'Each person must have a unique email address',
    ]
],

Доступ к данным вложенного массива

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

use AppRulesHasPermission;
use IlluminateSupportFacadesValidator;
use IlluminateValidationRule;

$validator = Validator::make($request->all(), [
    'companies.*.id' => Rule::forEach(function ($value, $attribute) {
        return [
            Rule::exists(Company::class, 'id'),
            new HasPermission('manage-company', $value),
        ];
    }),
]);

Индексы и позиции сообщений об ошибках

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

use IlluminateSupportFacadesValidator;

$input = [
    'photos' => [
        [
            'name' => 'BeachVacation.jpg',
            'description' => 'A photo of my beach vacation!',
        ],
        [
            'name' => 'GrandCanyon.jpg',
            'description' => '',
        ],
    ],
];

Validator::validate($input, [
    'photos.*.description' => 'required',
], [
    'photos.*.description.required' => 'Please describe photo #:position.',
]);

В приведенном выше примере валидация завершится ошибкой, и пользователю будет представлена ​​следующая ошибка: «Please describe photo #2.»

Валидация паролей

Чтобы гарантировать, что пароли имеют адекватный уровень сложности, вы можете использовать класс правила Password Laravel:

use IlluminateSupportFacadesValidator;
use IlluminateValidationRulesPassword;

$validator = Validator::make($request->all(), [
    'password' => ['required', 'confirmed', Password::min(8)],
]);

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

// Требуется не менее 8 символов ...
Password::min(8)

// Требуется хотя бы одна буква ...
Password::min(8)->letters()

// Требуется хотя бы одна заглавная и одна строчная буквы ...
Password::min(8)->mixedCase()

// Требуется хотя бы одна цифра ...
Password::min(8)->numbers()

// Требуется хотя бы один символ ...
Password::min(8)->symbols()

Кроме того, вы можете гарантировать, что пароль не был скомпрометирован при утечке данных, используя метод uncompromised:

Password::min(8)->uncompromised()

Внутренне объект правила Password использует модель k-Anonymity, чтобы определить, не произошла ли утечка пароля через сервис haveibeenpwned.com без ущерба для конфиденциальности или безопасности пользователя.

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

// Убедиться, что пароль появляется менее 3 раз в утечке данных ...
Password::min(8)->uncompromised(3);

Вы можете связать все методы в упомянутых выше примерах:

Password::min(8)
    ->letters()
    ->mixedCase()
    ->numbers()
    ->symbols()
    ->uncompromised()

Определение правил валидации паролей по умолчанию

Возможно, вам будет удобно указать правила валидации паролей по умолчанию в одном месте вашего приложения. Вы можете легко сделать это, используя метод Password::defaults, который принимает замыкание. Замыкание, переданное методу defaults, должно вернуть конфигурацию правила пароля по умолчанию. Обычно вызов метода defaults осуществляется в методе boot одного из поставщиков служб вашего приложения:

use IlluminateValidationRulesPassword;

/**
 * Загрузка любых служб приложения.
 *
 * @return void
 */
public function boot()
{
    Password::defaults(function () {
        $rule = Password::min(8);

        return $this->app->isProduction()
                    ? $rule->mixedCase()->uncompromised()
                    : $rule;
    });
}

Затем, когда вы хотите применить правила по умолчанию к конкретному паролю, проходящему валидацию, вы можете вызвать метод defaults без аргументов:

'password' => ['required', Password::defaults()],

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

use AppRulesZxcvbnRule;

Password::defaults(function () {
    $rule = Password::min(8)->rules([new ZxcvbnRule]);

    // ...
});

Пользовательские правила валидации

Использование класса Rule

Laravel предлагает множество полезных правил валидации; однако вы можете указать свои собственные. Один из методов регистрации собственных правил валидации – использование объектов правил. Чтобы сгенерировать новый объект правила, вы можете использовать команду make:rule Artisan. Давайте воспользуемся этой командой, чтобы сгенерировать правило, которое проверяет, что строка состоит из прописных букв. Laravel поместит новый класс правила в каталог app/Rules вашего приложения. Если этот каталог не существует в вашем приложении, то Laravel предварительно создаст его, когда вы выполните команду Artisan для создания своего правила:

php artisan make:rule Uppercase

Как только правило создано, мы готовы определить его поведение. Объект правила содержит два метода: passes и message. Метод passes получает значение и имя атрибута и должен возвращать true или false в зависимости от того, является ли значение атрибута допустимым или нет. Метод message должен возвращать сообщение об ошибке валидации, которое следует использовать, если проверка оказалась не успешной:

<?php

namespace AppRules;

use IlluminateContractsValidationRule;

class Uppercase implements Rule
{
    /**
     * Определить, пройдено ли правило валидации.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return strtoupper($value) === $value;
    }

    /**
     * Получить сообщение об ошибке валидации.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be uppercase.';
    }
}

Вы можете вызвать помощник trans в методе message, если хотите вернуть сообщение об ошибке из ваших файлов перевода:

/**
 * Получить сообщение об ошибке валидации.
 *
 * @return string
 */
public function message()
{
    return trans('validation.uppercase');
}

После определения правила вы можете отправить его валидатору, передав экземпляр объекта правила с другими вашими правилами валидации:

use AppRulesUppercase;

$request->validate([
    'name' => ['required', 'string', new Uppercase],
]);

Доступ к дополнительным данным

Если вашему пользовательскому классу правил валидации требуется доступ к другим валидируемым данным, то ваш класс правил может реализовать интерфейс IlluminateContractsValidationDataAwareRule. Этот интерфейс требует, чтобы ваш класс определял метод setData. Этот метод будет автоматически вызван Laravel (до того, как начнется валидация) со всеми проверяемыми данными:

<?php

namespace AppRules;

use IlluminateContractsValidationRule;
use IlluminateContractsValidationDataAwareRule;

class Uppercase implements Rule, DataAwareRule
{
    /**
     * Все валидируемые данные.
     *
     * @var array
     */
    protected $data = [];

    // ...

    /**
     * Установить валидируемые данные.
     *
     * @param  array  $data
     * @return $this
     */
    public function setData($data)
    {
        $this->data = $data;

        return $this;
    }
}

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

<?php

namespace AppRules;

use IlluminateContractsValidationRule;
use IlluminateContractsValidationValidatorAwareRule;

class Uppercase implements Rule, ValidatorAwareRule
{
    /**
     * Экземпляр валидатора.
     *
     * @var IlluminateValidationValidator
     */
    protected $validator;

    // ...

    /**
     * Установить текущий валидатор.
     *
     * @param  IlluminateValidationValidator  $validator
     * @return $this
     */
    public function setValidator($validator)
    {
        $this->validator = $validator;

        return $this;
    }
}

Использование замыканий

Если вам нужна функциональность собственного правила только один раз во всем приложении, то вы можете использовать анонимное правило вместо объекта правила. Анонимное правило получит имя атрибута, значение атрибута и замыкание $fail, которое должно быть вызвано при не успешной проверки:

use IlluminateSupportFacadesValidator;

$validator = Validator::make($request->all(), [
    'title' => [
        'required',
        'max:255',
        function ($attribute, $value, $fail) {
            if ($value === 'foo') {
                $fail('The '.$attribute.' is invalid.');
            }
        },
    ],
]);

Неявные правила

По умолчанию, правила валидации, включая созданные вами, не применяются, если проверяемый атрибут отсутствует или содержит пустую строку. Например, правило unique не будет выполнено для пустой строки:

use IlluminateSupportFacadesValidator;

$rules = ['name' => 'unique:users,name'];

$input = ['name' => ''];

Validator::make($input, $rules)->passes(); // true

Чтобы ваше правило было применено, даже если атрибут пуст, то правило должно подразумевать, что атрибут является обязательным. Чтобы создать «неявное» правило, реализуйте интерфейс IlluminateContractsValidationImplicitRule. Это «маркерный интерфейс» для валидатора; следовательно, он не содержит никаких дополнительных методов, которые вам нужно реализовать, помимо методов, требуемых типичным интерфейсом Rule.

Чтобы сгенерировать новый объект неявного правила, вы можете использовать команду make:rule Artisan с флагом --implicit:

php artisan make:rule Uppercase --implicit

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

В свое время мне почти всем нравился Angular 2+, это хорошо спроектированный фреймворк, который на голову выше остальных популярных фронтенд фреймворков по инженерному уровню исполнения. Но были у него и весьма странные недоработки. Одна из них это невозможность ручного вызова валидации или ревалидации формы, которая наблюдалась как минимум, до 8ой версии. Нельзя сказать чтобы там сильно увлекаются реактивностью, но вот в этой подсистеме похоже какие-то реактивные соображения побудили разработчиков реализовать валидацию только через привязку, вынудив разработчиков прикладных решений обращаться к костылям навроде установки состояния “нетронуто” для полей и вообще усложняя написание сложных валидаторов с продвинутой логикой и участием нескольких полей сразу. Опыт борьбы с ангуляровским валидатором и некоторыми другими особенностями фреймворка усилил мое впечатление от того насколько элегантным и простым оказалось после этого использование HTML5 API для валидации форм, которое “просто работает” в любом современном браузере даже без подключения фреймворков и библиотек.

Базой для работы валидаторов являются атрибуты элементов. С помощью атрибутов мы сразу можем задать следующие ограничения:
required — поле обязательное, т.е. требует заполнения
min max step — минимально и максимально допустимые значения, а также шаг изменения
minlength и maxlength — ограничители по количеству допустимых символов ввода
pattern — регулярное выражение
Вроде бы не густо, однако, pattern дает нам довольно богатые возможности по проверке значений, легко нагугливаются регулярки позволяющие сходу проверять номера телефонов, емейл адреса и урлы и многое другое востребованное.
Расставленные на элементы формы эти атрибуты автоматически не позволят сработать кнопке из той же формы выполняющей submit значений на сервер, правда сегодня такой кейс может показаться многим анахроничным. Но это еще не беда, т.к. с помощью клиентского кода на JavaScript мы можем точно также и даже лучше пользоваться всеми этими валидаторами. Поэтому мы не будем использовать input type=email, а попробуем сделать свое поле с проверкой вводимого на соответствие правилам формирования адресов электронной почты. Сделаем простую форму:

<form name="myform" id="myform">
   <input type="text" pattern="^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$" placeholder="email here"/>
   <input type="submit">
</form>

Валидатор сразу работает и на попытку нажимать кнопку выдает предупреждение на языке локали браузера.

Соответственно ввод mail@example.com дает успешный сабмит формы.
Чтобы развить свое поведение надо получить доступ к инстансу формы, это можно сделать через глобальный document по имени, индексу (id) или порядковому номеру начиная с нуля.

<script type="module">
   document.forms.myform.onsubmit = (event) => {
       console.log('validate');
       return false;
   };
</script>

или по селектору одним из методов, таким как document.getElementById() или document.querySelector()
для проверки результатов запустим http-server

npx http-server

после того как команда отработает, в браузере можно открывать 127.0.0.1:8080/ или тот адрес, что он напишет вам в консоли и отлаживать результаты.

Заменим сабмит на обычную кнопку, и будем вызывать проверку формы вручную, немного изменив пример.

<form id="myform" action="#">
   <input type="text" pattern="^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$" required placeholder="email here" />
   <input type="button" name="subm" value="OK" />
</form>

<script type="module">;
   myform.subm.onclick = (event) => {
       console.log(form.checkValidity());
       return false;
   };
</script>

В данном примере видно, что мапинг объектов формы по их id и name работает и для дочерних по отношению к форме элементов, что выглядит очень изящно. Теперь наш код выводит в консоль состояние валидности формы.
Наличие методов ручного запуска валидации, не означает, что она не осуществляется без их вызова.
Результаты ввода и других изменений на форме сразу отражаются на ее состоянии, что проявляется в наличии псевдоклассов стилей valid и invalid. Если добавить выделение цветом, то можно заметить как сразу срабатывает валидация.

<style>
  :valid {
       border: 1px solid green;
   }
  :invalid {
       border: 1px solid red;
   }
</style>

Для того, чтобы форма не мозолила глаза красным до того как пользователь попробовал что-то в нее вводить, можно использовать лайфхак с плейсхолдером:

<style>
   input:valid {
       border: 1px solid green;
   }
   input:not(:placeholder-shown):invalid {
       border: 1px solid red;
   }
</style>

На элементы формы можно навесить внешние обработчики для событий валидации.

<script type="module">
   myform.email.oninvalid = (event) => {
       alert('Wrong email !!11');
   };
   myform.subm.onclick = (event) => {
       console.log(form.checkValidity());
       return false;
   };
</script>

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

И еще один замечательный момент тут в том, что они будут вызываться уже не при вводе данных, а только при программном дергании валидации, т.е. вызове метода checkValidity().

Соответственно мы можем, обработать это поведение:

myform.subm.onclick = (event) => {
   if (myform.checkValidity()) {
       alert('Valid !');
   } else {
       alert('Invalid !')
   }
   return false;
};

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

У checkValidity() есть аналог reportValidity(), который возвращает результат не вызывая при этом повторной валидации.

А как узнать какое поле неправильное?

Свойство .validity есть у каждого элемента ввода формы как и возможность вызвать на нем методы валидации, свойство имеет следующую структуру:

ValueState: {
valid — общий признак корректности значения
valueMissing — значение требуется, но не задано
typeMismatch — введено неправильное по типу значение
patternMismatch — введен не соответствующее шаблону значение
tooLong — значение больше чем maxlength
tooShort — значение меньше чем minlength
rangeUnderflow — значение меньше min
rangeOverflow — значение больше max
stepMismatch — значение не соответствует шагу
badInput — ввод не может быть приведен к значению
customError — произвольная ошибка
}

В основном представлены, как мы видим, свойства ошибок соответствующие стандартным атрибутам валидации, тогда как .customError это наш задел для расширения.
Вызвав метод .setCustomValidity() с аргументом в виде строки с текстом ошибки мы можем обозначить элемент формы как невалидный. Установить или получить текст ошибки можно также через свойство .validationMessage.
Чтобы не задавливать браузерные валидации можно использовать свойство .willValidate, которое сообщает будут ли вызваны стандартные валидации на поле.
Передав пустую строку в качестве аргумента .setCustomValidity() мы можем вернуть его состояние к валидному.
Давайте добавим поддержку собственного атрибута my-pattern, который для наглядности будет точно так же проверять значение на соответствие регулярному выражению.
В случае ошибки сообщение, помимо того как это предусмотрено в браузере, будет выводиться рядом с полем
Валидация будет срабатывать на изменении значения нашего альтернативного поля и при нажатии кнопки.

<form id="myform" action="#">
   <div>
       <input type="text" name="email" id="email" value="" pattern="^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$" required placeholder="email here" />
       <span class="msg"></span>
   </div>
   <div>
       <input type="text" name="customInput" id="customInput" my-pattern="^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$" required placeholder="text here" />
       <span class="msg"></span>
   </div>
   <button type="submit" name="subm" value="OK">OK</button>
</form>
<style>
   input:valid {
       border: 1px solid green;
   }
   input:not(:placeholder-shown):invalid {
       border: 1px solid red;
   }
</style>
<script type="module">
   myform.customInput.oninvalid = (event) => {
       let el = event.target;
       let msg = el.parentElement.querySelector('.msg');
       msg.innerText = el.validationMessage;
       console.log('oninvalid, id: ', el.id);
   };
   myform.customInput.oninput = (event) => {
       let el = event.currentTarget;
       validateWithMyPattern(el);
       markValidity(el);
   };
   function markValidity(el) {
       el.checkValidity();
       let msg = el.parentElement.querySelector('.msg');
       if (el.validity.valid) {
           msg.innerText = '';
       } else {
           msg.innerText = el.validationMessage;
       }
   }
   function validateWithMyPattern(field) {
       if (field.value) {
           if (field.hasAttribute('my-pattern') &&
               field.value.match(field.getAttribute('my-pattern'))) {
               field.setCustomValidity('');
           } else {
               field.setCustomValidity('My pattern error');
           }
       }
   }
   myform.subm.onclick = (event) => {
       for (let formEl of myform.querySelectorAll('input')) {
           validateWithMyPattern(formEl);
           markValidity(formEl);
       }
       if (myform.reportValidity()) {
           alert('Valid !');
       } else {
           alert('Invalid !')
       }
       return false;
   };
</script>

Теперь у нас два подобных поля проверяющих значение стандартным валидатором и собственноручно написанным.

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

Из ограничений Validation API мне более запомнилось только исходная невалидность полей. Для ее кроме хитрости с placeholder или специальными состояниями a-la untouched можно производить всю валидацию программно на событиях input и submit сочетая собственные валидаторы со стандартными.
Решая свои задачи, я пришел к необходимости создать свой компонент, выполняющий задачи формы заодно для поддержки собственных элементов ввода, позволяющий задавать разное поведение валидации и уведомлений и вешать любые валидаторы и использующий при этом стандартизированный Validation API. Посмотреть на него можно вот тут: https://bitbucket.org/techminded/skinny-widgets/src/master/src/form/
а код примера из этой статьи найти вот тут:
https://bitbucket.org/techminded/myform/

На что заводятся «Проблемы»

  • Обновлено 14 Feb 2023
  • 11 минуты
  • Темная тема

    Светлая тема


Клиенты, действия

Описание Комментарий
На проекте есть клиенты с более чем {размер квоты} действий. Каждый день сенсор проверяет количество действий у клиента. По умолчанию установлен лимит в 100 000 действий.
За день один клиент совершил более {размер квоты} действий. Каждый день сенсор проверяет количество действий у клиента за последние сутки. По умолчанию установлен лимит в 2000 действий за день.
Для разных клиентов переданы одинаковые идентификаторы устройств. За день у клиента сменилось устройство более {размер квоты} раз. Каждый день сенсор проверяет количество действий смены устройства у клиента за последние сутки. По умолчанию установлен лимит в 50 действий за день.
У разных клиентов обнаружены одинаковые контактные данные. Из-за различий в контактах или ID объединение невозможно. Из-за этого одинаковые контакты были затерты у одного из похожих клиентов. За день это произошло более {размер квоты} раз. Каждый день сенсор проверяет количество действий отмечания клиентов похожим другому клиенту у клиента за последние сутки. По умолчанию установлен лимит в 50 действий за день.
Для разных клиентов переданы одинаковые контакты или ID. За день более {размер квоты} клиентов были объединены в один профиль. Каждый день сенсор проверяет количество действий объединения у клиента за последние сутки. По умолчанию установлен лимит в 50 действий за день.
Происходит много объединений клиентов. За последний день у {количество клиентов} клиентов было более {размер квоты} объединений. Каждый день сенсор проверяет процент клиентов с объединениями за последние сутки. Если больше 5 процентов базы имело число объединений за предыдущий день больше порога, заводится проблема. По умолчанию установлен лимит в 10 действий за день.
У разных клиентов обнаружены одинаковые контактные данные. Из-за различий в контактах или ID объединение невозможно. Одинаковые контакты были затерты у одного из похожих клиентов. За последний день у {количество клиентов} клиентов было более {размер квоты} похожих на них клиентов. Каждый день сенсор проверяет процент клиентов с отмеченных похожими за последние сутки. Если больше 5 процентов базы имело число похожестей за предыдущий день больше порога, заводится проблема. По умолчанию установлен лимит в 10 действий за день.

Контакты

Описание Комментарий
При редактировании клиент c Id {идентификатор} потерял доступ к аккаунту по следующим контактам: {контакты}.
Клиент c Id {идентификатор} потерял доступ к аккаунту по следующим контактам: {контакты}.
При невозможности объединения клиентов из-за найденных противоречий мы можем отобрать доступ у одного из клиентов. Если это происходит по причине галочки «не объединять» у уникального идентификатора, мы заводим проблему для такого клиента.
Устройство {deviceUUID} добавлено в черный список. По данному контакту был превышен лимит редактирований/объединений ({размер квоты}). Если объединений по устройству больше порога, мы добавляем это устройство в черный список и заводим проблему. По умолчанию установлен лимит в 50 объединений по устройству/переходов устройства за час.
Email {email} добавлен в черный список. По данному контакту был превышен лимит редактирований/объединений ({размер квоты}). Если объединений по email больше порога, мы добавляем этот email в черный список и заводим проблему. По умолчанию установлен лимит в 35 объединений по устройству/переходов устройства за час.
Мобильный телефон {мобильный номер} добавлен в черный список. По данному контакту был превышен лимит редактирований/объединений ({размер квоты}). Если объединений по телефону больше порога, мы добавляем этот телефон в черный список и заводим проблему. По умолчанию установлен лимит в 35 объединений по устройству/переходов устройства за час.
Уникальный идентификатор {название идентификатора}: {идентификатор клиента} добавлен в черный список. По данному контакту был превышен лимит редактирований/объединений ({размер квоты}). Если таких объединений по уникальному идентификатору больше порога, мы добавляем этот идентификатор в черный список и заводим проблему. По умолчанию установлен лимит в 35 объединений по устройству/переходов устройства за час.
Адрес email не указан, но подтверждён. Операция/триггер пытаются установить флаг подтвержения клиенту без email, и сами при этом email не передают.

Дисконтные карты

Описание Комментарий
Закончились карты типа {тип дисконтной карты}. При выдаче дисконтной карты из пула в нем закончились доступные карты данного типа.

Операции, импорт ftp

Описание Комментарий
{вчерашняя дата} у операции не было ни одного вызова. FTP импорт перестал выполняться после 6 дней непрерывных выполнений.
{вчерашняя дата} у операции не было ни одного вызова в точке интеграции {EndpointId}. FTP импорт перестал выполняться в точке интеграции после 6 дней непрерывных выполнений.
{вчерашняя дата} у операции не было ни одного вызова. Операцию перестали вызывать после 6 последовательных дней с ежедневным количеством вызовов не менее 5.
{вчерашняя дата} у операции не было ни одного вызова в точке интеграции {EndpointId}. Операцию перестали вызывать в точке интеграции после 6 последовательных дней с ежедневным количеством вызовов не менее 5.
Используется неизвестная операция. Число ошибок/предупреждений в операции пробивает плавающий процентный порог и при этом операция не найдена в базе.
{процент}% вызовов операции за {вчерашняя дата} были с предупреждениями
Успешных: {количество}
Ошибочных: {количество}
Предупреждений: {количество}
Успешных (среднее за 30 дней): {количество}
Число предупреждений в вызовах операции пробивает плавающий процентный порог для известной операции.
{процент}% вызовов операции за {вчерашняя дата} были с ошибками
Успешных: {количество}
Ошибочных: {количество}
Предупреждений: {количество}
Успешных (среднее за 30 дней): {количество}
Число ошибок в вызовах операции пробивает плавающий процентный порог для известной операции.
{процент}% вызовов операции в точке интеграции {EndpointId} за {вчерашняя дата} были с предупреждениями
Успешных: {количество}
Ошибочных: {количество}
Предупреждений: {количество}
Успешных (среднее за 30 дней): {количество}
Число предупреждений в вызовах операции в точке интеграции пробивает плавающий процентный порог для известной операции.
{процент}% вызовов операции в точке интеграции {EndpointId} за {вчерашняя дата} были с ошибками
Успешных: {количество}
Ошибочных: {количество}
Предупреждений: {количество}
Успешных (среднее за 30 дней): {количество}
Число ошибок в вызовах операции в точке интеграции пробивает плавающий процентный порог для известной операции.
Невозможно загрузить файл {имя файла в ftp}, поскольку его размер {размер файла в байтах} превышает максимально допустимый {максимальный размер файла в байтах (2 Гб)} ftp интеграция пытается взять в работу файл, чей размер больше лимита.
Невозможно загрузить файл {имя файла в ftp}, поскольку строка {номер невалидной строки в файле} превышает максимально допустимый размер Одна из строк ftp файла не влезает в память.
Повторно загружен файл «{имя файла в ftp}«. Файл с таким именем уже обрабатывался. Повторная обработка файла с повторяющимся именем невозможна. Проверьте корректность интеграции. Если повторение имени файла корректно, включите в интеграции настройку «Файл перезаписывается каждый раз». ftp интеграция пытается взять в работу файл, но файл с таким имеем уже обрабатывается в этой интеграции и отключена настройка ‘Файл перезаписывается каждый раз’.
Возникла ошибка при обработке файла «{имя файла в ftp}«: «${ErrorMessage}». Происходит ошибка FTP соединения, парсинга CSV или валидация входных данных.

Сегменты

Описание Комментарий
Пересчет сегментации приостановлен: пересчет идёт слишком долго. Новая попытка пересчета будет произведена завтра. Попробуйте упростить фильтр сегментации или обратитесь за помощью к вашему менеджеру Упростите фильтр. Подробнее в инструкции.
Сегментация медленно обновляется.
Используйте в фильтре пересчитываемые сегменты или укажите более редкое событие для проверки принадлежности к сегментации. Упростите фильтр. Подробнее в инструкции.

Рассылки

Описание Комментарий
Запланированную рассылку не удалось отправить вовремя.
  • Не начали отправку больше часа
  • Не смогли собрать контрольную группу для рассылки
  • Не нашли ни одного получателя
Не удалось отправить рассылку.
  • Не начали отправку больше часа
  • Не смогли собрать контрольную группу для рассылки
  • Не нашли ни одного получателя
Ошибка при отправке письма.
  • Актуальность рассылки прошла.
  • Модуль рассылок отключен.
Рассылка остановлена, так более 10% сообщений было отклонено как спам. Рассылка остановлена из-за высокого spam rate.
Ошибка при формировании письма. Не удалось сформировать письмо. Например, пытаемся использовать параметр, который у клиента не заполнен.
Не удалось удалить действия связанные с рассылкой. Действия не удалось удалить из-за связи с другими сущностями. Проверьте задачу удаления.
Не удалось удалить рассылку и/или связанные сущности. Рассылку не удалось удалить из-за связи с другими сущностями. Проверьте задачу удаления.
Ошибка при отправке рассылки. Не удалось отправить рассылку из V3-операции.

DKIM, SMPP

Описание Комментарий
У отправителя {senderSenderName} {senderSenderEmail} в DNS домена прописан неправильный DKIM ключ Mindbox. Перейдите в настройки рассылок.
У отправителя {senderSenderName} {senderSenderEmail} в DNS домена прописан неправильный DKIM ключ Mindbox. Возможно, DNS был недавно изменен. Перейдите в настройки рассылок.
У отправителя {senderSenderName} {senderSenderEmail} в DNS домена перестал обнаруживаться ключ DKIM Mindbox. Перейдите в настройки рассылок.
Проблемы обнаруживаются специальной задачей, которая обрабатывает/синхронизирует настройки DKIM для настроенных в CDP отправителей. Проверьте настройки DKIM.
Ошибка «ESME_RBINDFAIL» при подключении к провайдеру. Рассылки не отправляются Вероятно, IP-адресов Mindbox нет в списке разрешенных. Свяжитесь с провайдером и сообщите менеджеру код ошибки.
Ошибка «ESME_RALYBND» при подключении к провайдеру. Рассылки не отправляются Вероятно, превышен лимит одновременных соединений с сервером. Свяжитесь с провайдером и сообщите менеджеру код ошибки.
Ошибка «ESME_RINVSYSID» при подключении к провайдеру. Рассылки не отправляются Вероятно, указан неверный логин. Свяжитесь с провайдером и сообщите менеджеру код ошибки.
Ошибка «ESME_RINVPASWD» при подключении к провайдеру. Рассылки не отправляются Вероятно, указан неправильный пароль. Свяжитесь с провайдером и сообщите менеджеру код ошибки.
Не удалось подключиться к провайдеру. Рассылки не отправляются Проверьте host и port. Если они правильные — сообщите провайдеру дату и время отсутствия подключения.
Ошибка { ErrorStatus } при подключении к провайдеру. Рассылки не отправляются Свяжитесь с провайдером и сообщите о проблеме.

Вебхуки

Описание Комментарий
Проблема возникла при вызове веб-хука в шаге триггера для получателя с id «id получателя». Не получается сформировать шаблон. Например, пытаемся вывести параметр, значение которого не заполнено.
При отправке вебхука возникла ошибка. Проверьте, корректно ли составлен вебхук. Повторная отправка произведена не будет. Когда ссылка вебхука, получившаяся после формирования вебхука, некорректная.
При отправке вебхука возникла ошибка. Проверьте, корректно ли составлен вебхук. Повторная попытка будет произведена в ближайшее время. ID клиента, если был передан при вызове хука. Сервис вернул код ошибки: {код ответа от сервера клиента}. Клиентская ошибка во время вызова вебхука: запрос успешно отправлен на сервер клиента, но возвращается код ответа от 400 до 499
При отправке вебхука возникла ошибка. Проверьте, доступна ли внешняя система и корректно ли составлен вебхук. Серверная ошибка во время вызова вебхука.

Триггеры, сценарии

Описание Комментарий
При работе триггера возникают следующие ошибки: {валидационное сообщение} При проверке “Условия запуска триггера” или при запуске триггера, в случае ошибки валидации.
Ошибка: Триггер {название триггера} остановлен, т.к. в нем используется удаленное условие фильтрации. Поправьте условия фильтрации. После этого можно снова запустить триггер При запуске триггера не удалось по какой-либо причине применить фильтр.
Триггер остановлен. Используйте в фильтре пересчитываемые сегменты или настройте запуск триггера на более редкое событие. После этого можно снова запустить триггер. За помощью обратитесь к вашему менеджеру. В сценариях и триггерах сложный фильтр и большое количество событий потребляет много ресурсов.
В рассылку {название рассылки} не переданы необходимые поля: «{параметр}«. Проверьте, можно ли этот параметр рассылки использовать с текущим событием. В сценарии/триггере поменяли рассылку и в ней появились параметры, которые не соответсвуют событию.

Продукты

Описание Комментарий
Не удалось загрузить документ по адресу Не смогли скачать yml-файл. Продукты не обновляются.

Программа лояльности

Описание Комментарий
Нет доступного промокода в пуле {название пула} В пуле промокодов нет доступных для выдачи промокодов. Новые промокоды не выдаются в механиках.
Количество доступных для выдачи промокодов меньше {указанный порог}. Загрузите их еще или измените минимальный порог нотификации В пуле можно указать порог количества промокодов для информирования. Когда количество промокодов ниже порога, открывается проблема.
В пуле промокодов {название пула} заканчиваются коды. Сгенерировать новые коды заданного формата невозможно. Настроена автоматическая генерация промокодов в пул. В шаблоне закончились возможные вариации для генерации.
Новое положительное начисление баллов в заказе {OrderId} имеет уже истёкшую дату сгорания Баланс, который начислился после возврата, сразу сгорает, потому что возвращаем баллы с истекшим сроком сгорания.
Промоакция не смогла примениться, т.к. продукт с id {идентификатор} одновременно относится к сегментам {названия сегментов} Ошибка в конфигурации промоакции. В промоакции настроены условия, которые не могут примениться. Например, скидка 5 и 10 процентов на один и тот же товар.
Баланс недостаточен. Необходимо {сколько пытались снять}, а есть только {текущий баланс} Настроен шаг изменения баланса. Не смогли выполнить из-за недостаточного количества баллов.
Для заказа {идентификатор заказа} в течении суток не была завершена транзакция За сутки не завершилась транзакция процессинга.
Закончились карты типа {Type} В триггерах и операциях при выборе шага «привязать карту» не смогли найти доступную в пуле.

Рекомендации

Описание Комментарий
На проекте нет ни одного продукта в наличии. Механика {название механики} остановлена. В системе нет ни одного продукта в наличии, либо вообще нет продуктов. Алгоритм ставится на паузу и переходит в статус «Пересчет остановлен из-за проблем».
В сегменте {название сегмента} нет ни одного продукта в наличии. Механика {название механики} остановлена. В механике выбран сегмент, в котором нет продуктов в наличии. Алгоритм ставится на паузу и переходит в статус «Пересчет остановлен из-за проблем».
На проекте нет ни одного заказанного продукта в наличии. Механика {название механики} остановлена. В системе нет ни одного заказанного продукта. Алгоритм ставится на паузу и переходит в статус «Пересчет остановлен из-за проблем».
В сегменте {название сегмента} нет ни одного заказанного продукта в наличии. Механика {название механики} остановлена. В механике выбран сегмент. При этом продукты из сегмента ни разу не заказывались. Алгоритм ставится на паузу и переходит в статус «Пересчет остановлен из-за проблем».
На проекте нет ни одного клиента. Механика {название механики} остановлена. На проекте нет клиентов. Алгоритм ставится на паузу и переходит в статус «Пересчет остановлен из-за проблем».
Механика {название механики} не использовалась более 20 дней и была поставлена на паузу. Механика не будет пересчитываться до первого вызова в операции или рассылке, либо до нажатия кнопки «Пересчет». Не было вызовов механики более 20 дней. Алгоритм ставится на паузу и переходит в статус «Пересчет остановлен из-за проблем».
Превышен лимит в 100 запросов в сутки в операциях. Для отключения демо режима включите модуль рекомендаций. Рекомендации находятся в демо-режиме.
В алгоритме используется более 5000000 продуктов, дальнейший расчет прекращен. Попробуйте уменьшить размер сегмента, для которого считаются рекомендации. На проекте используется более 5 000 000 продуктов.

Персонализация сайта

Описание Комментарий
В виджет рекомендаций {название виджета} передан неизвестный id продукта. ID — {идентификатор}, внешняя система — {ВС} В виджет передается несуществующий id продукта.
В виджет рекомендаций {название виджета} передан неизвестный id категории. ID — {идентификатор}, внешняя система — {ВС} В виджет передается несуществующий id категории.
{название механики} не может быть отображен на сайте {адрес сайта}, так как эндпоинт {точка интеграции} не задан для этого домена Механика установлена на сайте, на котором нет точки интеграции, указанной в механике.
{название механики} не отображается на сайте {адрес сайта}, возможно код трекера персонализации был удален Код трекера удален с сайта, на котором установлена механика, но механика при этом включена.
В попапе/виджете/встроенном блоке {идентификатор} обнаружены ошибки Подробности ошибки указываем в комментарии проблемы. Механика при этом не останавливается.
Превышен лимит показов механики в демо-режиме Превышено допустимое количество показов механики в демо-режиме. Лимит — 50 на механику.

Что такое CDP и когда пора начинать ее использовать

Была ли эта статья полезной?

Содержание

  1. Документ не обработан, так как содержит невалидные подписи
  2. Ошибка на сайте Госуслуги «Не удалось проверить вложение на целостность» – инструкция как исправить
  3. Возможные проблемы на Госуслугах
  4. Ошибки при отправке заявления в ведомство на Госуслугах — что делать, и как исправить?
  5. Перебои на сайте, или ошибка при отправке заявления на Госуслугах
  6. Произошла ошибка при отправке запроса в ведомство — проблема на стороне пользователя
  7. Технические требованиям к файлам загружаемым на ГосУслуги
  8. Требования к содержимому фотографии:
  9. Требования к техническим параметрам файла:
  10. Что делать если появляется ошибка при отправке заявления на Госуслугах?

Документ не обработан, так как содержит невалидные подписи

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

1) Не установлен корневой сертификат Головного удостоверяющего центра (ГУЦ) Минкомсвязи, уполномоченного федерального органа по аккредитации удостоверяющих центров.

2) Не установлен корневой сертификат Удостоверяющего Центра, выпустившего сертификат ключа электронной подписи Вашего контрагента или Оператора ЭДО.

Рекомендуется сначала воспользоваться инструкцией для установки корневого сертификата ГУЦ. После установки проверьте электронную подпись так, как написано здесь. Если это не помогло решить проблему, следуйте рекомендациям из данного раздела.

Открываем сам электронный документ, по которому выдается ошибка, на вкладке «Подписи» , содержится 1 или 2 подписи, статус одной из них, или обеих, выделен красным курсивом и статусом «Не верна».

Необходимо двойным кликом открыть данный сертификат(ы) и сохранить на рабочий стол или в любую другую папку на диске:

Затем нужно открыть сохраненный файл и перейти на закладку «Путь сертификации»:

Мы видим, что корневой сертификат (сертификат Удостоверяющего Центра) действительно не установлен. Для его установки достаточно открыть корневой сертификат двойным кликом и установить (см. ниже).

В случае если не отображается цепочка сертификатов (на закладке «Путь сертификации» есть только сертификат пользователя), перейдите на вкладку «Состав» , найдите раздел, «Доступ к информации о центре сертификации»:

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

Открыв корневой сертификат (из пути сертификации в сертификате пользователя или скачанный файл) нажмите кнопку «Установить сертификат. «:

В качестве хранилища корневого сертификата необходимо выбрать «Доверенные корневые центры сертификации»:

Далее нужно подтвердить установку корневого сертификата:

Переключившись в окно 1С, правой кнопкой мыши нажимаем на подпись со статусом «Не верна» и в контекстном меню выбираем команду «Проверить электронные подписи»:

Источник

Ошибка на сайте Госуслуги «Не удалось проверить вложение на целостность» – инструкция как исправить

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

С момента создания сайта происходит постоянная его модернизация и расширение функционала.

Однако, несмотря на огромную работу, многие пользователи в 2021 году по-прежнему могут столкнуться с некоторыми ошибками.

Возможные проблемы на Госуслугах

Наиболее распространенными проблемами, с которыми можно встретиться во время работы с порталом являются:

  • Потеря данных для авторизации на сервисе (логина и/или пароля). При возникновении подобной ситуации необходимо на стартовой странице нажать на окно «Восстановить» и, следуя подсказкам, пройти процедуру создания нового пароля. С новыми данными необходимо повторно войти в личный кабинет. При отсутствии такой возможности следует обратиться в службу поддержки портала.
  • Паспортные данные не проходят контроль. Процедура проверки данных, которые указаны в личном кабинете во время регистрации, как правило, занимает несколько минут, однако может затянуться и до 5 дней. Если в указанные сроки пользователь не получил на номер мобильного телефона или адрес электронной почты уведомления об успешной авторизации, необходимо обратиться в службу поддержки с указанием причины. Самостоятельно осуществить проверку документа можно на официальном сайте МВД РФ.
  • Ошибки авторизации. Исправить данную проблему можно путем пересмотра данных, которые вводятся для успешного входа на сайт. При отсутствии изменений необходимо восстановить пароль, нажав на соответствующую кнопку. При ошибке авторизации с использованием электронной цифровой подписи следует осуществить проверку подлинности ЭЦП, установить программное обеспечение или обратиться в службу поддержки.

Источник

Ошибки при отправке заявления в ведомство на Госуслугах — что делать, и как исправить?

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

Рис. 1. Внутренняя ошибка на портале Госуслуг (Что-то пошло не так)

Если проблемы при загрузке файлов связаны с ошибками в их параметрах, то нужно обработать файлы по требованиям Госуслуг. Вы можете заказать редактирование файлов у нас. Обрабатываем файлы с гарантией загрузки на портале Госуслуг. Сфотографировать документы можно на камеру телефона. Для заказа нажмите на кнопку ниже.

Содержание:

Перебои на сайте, или ошибка при отправке заявления на Госуслугах

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

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

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

Рис. 2. Ошибка на Госуслугах — размер файла превышает максимально допустимый 5000 Кб

Например, описание ошибки может содержать следующие сведения:

Не все данные заполнены. При этом, пропущенное поле выделено красным цветом;

Объём файла больше максимально допустимого — 5120 Кб;

Размер вложения не должен быть ниже — 240Кб;

Файл имеет неверный тип. Только файлы с расширением — JPEG, JPG, BMP доступны к загрузке;

К загрузке доступно не более 10 файлов;

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

Как видно по вышеперечисленным ошибкам — их формулировки предельно ясны и понятны. Портал напрямую указывает, в чём проблема, и что нужно исправить.

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

Произошла ошибка при обработке запроса проверки фото;

Не сработало. Попробуйте снова;

Произошла ошибка при отправке заявления в ведомство;

Что то пошло не так;

Это может занять некоторое время (при этом, идёт бесконечная загрузка, и ничего не происходит);

Bad Request: На экране s60 не найдено экранов для перехода.

Рис. 3. Во время обработки запроса произошла ошибка

Такие ошибки сигнализируют о неких проблемах при отправке заявки на сайте Госуслуг, но при этом, их причины не выявлены автоматизированным алгоритмом сервиса.

Если проблемы при загрузке файлов связаны с ошибками в их технических параметрах (размер, вес и формат), то их нужно обработать в полном соответствии с требованиями Госуслуг. Вы можете заказать редактирование файлов на нашем сервисе. Обрабатываем файлы с гарантией одобрения на портале Госуслуг. Сфотографировать документы можно на камеру телефона. Для заказа нажмите на кнопку ниже.

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

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

Сбои в автоматизированном сервисе портала Госуслуг случаются не редко, в связи с большой нагрузкой на ресурс. При этом, они оперативно устраняются сотрудниками портала. Как правило, достаточно отправить повторный запрос через 10 или 15 минут

Также, очень часто помогает смена браузера. Например, ошибка с формулировкой — «Не сработало«, в большинстве случаев, решается перезаходом на ГосУслуги через новый браузер, и повторением заполнения заявки с нуля.

Рис. 4. Госуслуги — Не сработало. Попробуйте снова.

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

Таким образом, с временными неполадками на Госуслугах всё более менее понятно — их достаточно просто распознать и выявить. А в большинстве случаев, портал сообщит, что проблемы именно на его стороне.

Рис. 5. Портал Госуслуг временно недоступен

Совсем другое дело, если проблема наличествует на стороне пользователя. А это, как показывает практика, случается гораздо чаще.

При оформлении документов через интернет, со стороны пользователя могут допускаться те или иные ошибки, приводящие к отказу в приёме электронной заявки на Госуслугах.

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

Если проблемы при загрузке файлов связаны с ошибками в их параметрах, то нужно обработать файлы по требованиям Госуслуг. Вы можете заказать редактирование файлов у нас. Обрабатываем файлы с гарантией загрузки на портале Госуслуг. Сфотографировать документы можно на камеру телефона. Для заказа нажмите на кнопку ниже.

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

Произошла ошибка при отправке запроса в ведомство — проблема на стороне пользователя

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

Не стоит отчаиваться, и сразу же звонить на горячую линию Госуслуг. Выявить проблему самостоятельно не составит особого труда. Тем более, пул возможных ошибок со стороны посетителя не такой уж и большой. Разберём их по пунктам:

Ошибка в заполнении персональных данных;

Неисполнение требований Госуслуг к загружаемым файлам (личной фотографии, или документов в электронном виде);

Неверное указание адреса ведомства ответственного за обработку заявки.

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

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

Рис. 6. Ошибки при заполнении сведений о трудовой деятельности на портале Госуслуг

Например, при оформлении заявки на получение загранпаспорта, потребуется заполнить сведения о трудовой деятельности за последние 10 лет. Для этого, нужно указать точные даты поступления на работу, и увольнения-сокращения. А в периоды промежутков между работами обозначить — «Не работал (а)«, указав первый и крайний день нахождения в статусе безработного.

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

Что касается третьего пункта, а именно неверного указания подразделения ответственного за исполнение заявки, то указание неверного адреса ФМС, тоже достаточно распространённая ошибка на Госуслугах.

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

Начните вводить первые буквы адреса ближайшего к Вам подразделения (в случае оформления загранпаспорта, это будет отделение ФМС). При возникновении подсказок снизу от поля ввода, выберите правильный вариант. Не нужно пытаться в ручную вбивать адрес, игнорируя подсказки

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

Технические требованиям к файлам загружаемым на ГосУслуги

Итак, последний пункт, который нам остаётся проверить — параметры загружаемого файла. Что с ними может быть не так?

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

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

Требования к содержимому фотографии:

На снимке должен присутствовать только один человек, с положением головы строго в анфас, и спокойным выражением лица;

Изображение должно быть чёткое. Все особенности внешности и черты лица отчётливо просматриваемы;

Соотношение пропорций головы относительно общей площади фотографии — 80%;

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

Сканы или фотографии прочих документов загружаемых на Госуслуги, должны быть обрезаны по их границам (например, главного разворота паспорта)

Рис. 7.Требования к фотодля Госуслуг

Требования к техническим параметрам файла:

Размер (соотношение сторон). В зависимости от оформляемой услуги или документа, этот параметр может отличаться. Например, при подаче заявки на получение или смену паспорта РФ, необходимо прикрепить личное фото размером 35 на 45 мм;

Вес (объём) файла. По данному параметру существуют минимальные и максимальные ограничения за пределы которые нельзя выходить. Эти ограничения опять-таки зависят от конкретного вида оформляемой услуги или документа. Например, при оформлении справки о несудимости, общий объём загружаемых файлов не должен превышать — 5120 Кб;

Разрешение изображения. Не менее важный показатель качества изображения изменяемый в точках на дюйм (DPI). Как правило, Госуслуги принимают файлы с разрешением не менее 300 или 450 DPI. Значения ниже этой отметки, не принимаются, так как качество изображения может быть недостаточным, чтобы отчётливо прочесть информацию на скан-копии документа (например, главного разворота паспорта с актуальной информацией);

Формат прикрепляемого документа. Расширение файла тоже имеет значение, но в большинстве случаев ничего менять не придётся, так как портал Госуслуг принимает файлы в самых популярных форматах сжатия. Это — JPEG, PDF, RAR.

Рис. 8.Стандартные требования к файлам для загрузки на Госуслуги

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

Что делать если появляется ошибка при отправке заявления на Госуслугах?

Мы разобрали основные причины почему портал выдаёт сообщения об отказе в приёме заявления. Теперь осталось решить, что с этим делать?

На самом деле, здесь только один вариант — нужно устранить ошибку на которую указывает ведомство. Но есть два способа, как это можно сделать.

Первый способ . Требующий время, и не всегда очевидный в плане надёжного решения проблемы — попытаться самостоятельно исправить недочёт.

Если дело касается ошибки в заполнении данных (например, неправильно указана дата рождения), то это самый идеальный способ. Просто нужно проявить внимательность, и исправить нужный пункт.

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

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

Рис. 9. Редактирование файла через редактор FastStone Image Viewer

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

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

Если Вы столкнулись с проблемой, когда портал Госуслуг постоянно выдаёт ошибку при отправке заявления в ведомство, то одним из способов быстрого решения проблемы, будет обращение к специалистам сервиса ФотоНаГосуслуги.ру.

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

Заказать услугу редактирования фотографий и скан-копий документов для отправки на Госуслуги, можно перейдя по кнопке ниже.

Источник

Что означает слово не Валиден?

1. не являющийся валидным ◆ Если параметр не указан, то создается невалидный объект, который ни на что не указывает.

Что такое валидные данные?

Валидный (ударение на «и») означает «действительный, подходящий». … Например, SSL-сертификат является валидным, то есть действительным, только тогда, когда он выдан уполномоченным сертификационным центром для данного конкретного домена, а его срок годности ещё не истёк.

Что значит сертификат Невалиден?

Указывает, что сертификат невалидный. При этом ЭЦП действительна, срок действия не истек, ранее для доступа к сайту использовалась.

Что значит документ Валиден?

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

Что значит Адрес Невалидный?

Локальная часть находится перед символом @, а доменная — после него. Например, в адресе [email protected] «ivan. ivanov» — это локальная часть, а «company.com» — доменная. Если хотя бы одна из этих частей отсутствует, имейл адрес автоматически считается невалидным.

Что значит не валидный код?

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

Что такое валидность простыми словами?

Вали́дность (англ. validity, от лат. validus — «сильный, здоровый, достойный») — обоснованность и пригодность применения методик и результатов исследования в конкретных условиях. Более прикладное определение понятия «валидность» — мера соответствия методик и результатов исследования поставленным задачам.

Что значит паспортные данные не Валидны?

Если вы видите сообщение, что ваш номер не валиден в биллинге Теле2, это может означать, что вы ввели номер телефона неверно в форму. Для примера был введён заведомо несуществующий номер . … Если номер верный, возможно с системой произошёл сбой.

Что значит Валидное значение?

соответствующий требованиям; достоверный ◆ Валидным является такое высказывание, которое — в силу различных причин — включается в открытый для социума дискурс. Н.

Что значит электронная подпись Невалидна?

Электронная подпись невалидна

Обычно связана проблема с тем, что на ПК не установлен корневой сертификат (КС) Удостоверяющего центра. Это может быть по следующим причинам: … не установлен в соответствующую папку корневой сертификат удостоверяющего центра, изготовившего ЭЦП.

Что значит файл не валидный?

НЕВАЛИДНЫЙ, не соответствующий определенным требованиям или условиям, неправильный.

Что такое валидность кода?

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

Для чего нужна валидация?

Итак, что же такое валидация. Под этим понятием подразумевают процедуру проверки диагностики кода и исправление его в соответствии с требованиями определенного доктайпа (DTD). Каким образом проверить валидность. Используя w3c, происходит сразу несколько проверок кода.

Как понять Введите валидный email?

Это значит, что Вам нужно ввести правильную почту. Правильный (валидный) e-mail — это адрес почты, который содержит в себе определенную последовательность допустимых символов. При этом, почта не обязательно должна существовать.

Валидность теста [англ. validate — объявлять действительным, подтверждать] — один из основных (наряду с надежностью, репрезентативностью, объективностью, достоверностью и эффективностью) критериев оценки тестовых результатов. Понятие В. т. отражает прагматическую идею обязательной практической (применительно к науке эмпирической) проверки качества измерения психологических свойств личности. Если раньше понятие В. т. чаще других ассоциировалось с понятием «качество теста», то в последние годы все больше осознается роль интерпретации тестовых результатов. Таким образом, В. т. — это прежде всего адекватность интерпретации тестовых результатов по отношению к цели тестирования, содержанию основного понятия (содержанию диагносцируемого психического свойства) и применению результатов тестирования (в профессиональном отборе и других прикладных психологических обследованиях). В контексте прикладной задачи В. т. представляет собой не столько критерий качества теста, сколько показатель меры соответствия теста цели тестирования. Например, тест может быть валиден для измерения интеллекта и невалиден для оценки знаний. И наоборот: если тест создавался для проверки уровня знаний, то результаты по нему не могут быть интерпретированы как мера интеллектуального развития испытуемых. Результаты подобного истолкования невалидны изначально, по цели создания теста. Существенной стороной интерпретации является учет условий тестирования и применения результатов. Если тестирование протекает с нарушением правил (неодинаковое для всех время тестирования, различия в инструкциях, помощь отдельным испытуемым), то интерпретация таких нестандартных результатов не может быть названа валидной по условиям сбора данных. Содержание заданий теста должно соотноситься с содержанием основного понятия (концепции), отражающей измеряемое качество. Это гносеологический аспект В. т., отражающий меру связи теоретического понятия с операциональным понятием и качеством подбора эмпирических индикаторов. В западной психологической литературе отмеченный способ интерпретации тестовых результатов соотносится с определением конструктивной валидности (construct validity).

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

В.С. Аванесов, А.Г. Шмелев

Психологический словарь

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

Психологическая энциклопедия

(англ. validity of test) — важнейший критерий доброкачественности теста, характеризующий точность измерения исследуемого свойства; оценка адекватности теста исследуемой проблеме. В. т. определяется корреляцией его результатов с др. критериями измеряемого свойства (напр., В. т….

Психологическая энциклопедия

Словообразование. Происходит от англ. valid — имеющий силу и test — испытание. Категория. Психометрическая характеристика теста. Специфика. Действительная способность теста измерять ту психологическую характеристику, для диагностики которой он заявлен….

Психологическая энциклопедия

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

Психологическая энциклопедия

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

Поделиться:

Валидные и невалидные значения в тестировании


6

Невалидный емейл-адрес

Невалидное задание

Невалидное название

<h2>? ? ?</h2>

12 ответов:

Валидные и невалидные значения в тестировании



13



0

Последнее время эти понятия стали очень популярны.

Валидный — это правильный, действующий, действительный.

Невалидный — это недействующий, непригодный, негодный, недействительный, недоступный, закрытый.

Валидные и невалидные значения в тестировании



12



0

Такие термины можно встретить в интернете. Я эти термины понимаю так:

Невалидный емейл-адрес — это недействующий, закрытый емейл-адрес. Его могут закрыть если им долго не пользоваться.

Невалидное задание — это не качественное задание или не проверенное модератором задание.

Невалидное название — это неправильное название, название, которое нарушает установленные правила.

На просторах интернета еще можно встретить термин невалидный аккаунт. Невалидный аккаунт — это недействующий аккаунт. Возможно этот аккаунт должен пройти проверку(подтверждение номера телефона, электронной почты и прочее).

Валидные и невалидные значения в тестировании



5



0

Валидный.

Это значит действующий, соответствующий определённым требованиям, нормам, правилам, стандартам.

Например, для вёрстки сайтов существуют правила и нормы, разработанные Консоциумом Всемирной Паутины.

Проверить сайт на соответствие данным правилам можно здесь.

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

<hr />

Невалидный.

Это понятие является противоположным понятию «валидный».

Невалидный — значит недействующий, некорректный, неправильный, несоответствующий требованиям.

Например:

  • Невалидный e-mail означает, что адрес электронной почты вообще не существует или не соответствует стандартному формату. Примеры невалидных почтовых адресов — zxcmail.ru, vvr@mailru.

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

<hr />

Также добавлю, что понятия «валидный» и «невалидный» имеют иностранные корни.

Так в английском языке имеется слово «valid», а во французском — «valide».

Переводятся они так: «действительный», «допустимый».

Валидные и невалидные значения в тестировании



3



0

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

Например, невалидный аккаунт означает, что аккаунт в настоящее время не работает. Невалидное задание — задание неправильное, невалидная почта — недействующая, невалидные данные — недостоверные данные.

Валидные и невалидные значения в тестировании



3



0

Валидный и невалидный это прилагательные:

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

Невалидный — неправильный, нерабочий, недопустимый.

Пример использования слова: «Если параметр не указан, то создается невалидный объект, который ни на что не указывает.»

Веб-услуга — Проверка валидности e-mail адресов:

проверка валидности емейл адресов, валидный-невалидный, значение слова валидный

Валидные и невалидные значения в тестировании



2



0

Заимствованные слова, пришедшие к нам из английского языка, валидный и невалидный, на самом деле имеют простейшее объяснение или перевод — валидный — правильный, корректный, работающий и т.д. Невалидный соответственно — неправильный, некорректный, неработающий.

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

В английском, кстати, невалидный звучит, как инвалид invalid, что и без перевода понятно. Что значит инвалид знают все.

Валидные и невалидные значения в тестировании



2



0

Конечно, с этим словом мы так или иначе все знакомы — именно от английского слова «valid» произошло известное всем нам слово «инвалид», уже даже по одному этому слову мы можем составить какое-то начальное представление о значении терминов «валидный» или, напротив, «невалидный». Давайте посмотрим перевод слова «valid»:

Валидные и невалидные значения в тестировании

Эти значения как раз и будут значениями термина «валидный» — действительный, правомерный, допустимый, соответствующий. И противоположными будут значения термина «невалидный» (в зависимости от контекста) — недействительный, недопустимый, несоответствующий, неправильный, недействующий, непригодный, неактуальный.

Невалидный e-mail адрес — нерабочий, несуществующий, недействующий, недействительный;

Невалидное задание — некорректное, неправильное, неактуальное;

Невалидное название — неправильное, недопустимое, некорректное, несоответствующее чему-то.

Валидные и невалидные значения в тестировании



1



0

Действительное/недействительное значение

Валидные и невалидные значения в тестировании



1



0

Действительно, сейчас часто встречаются такие слова, как «валидный» и «невалидный». Чаще всего эти слова связаны с интернетом.

Уже с самого звучания этих слов понятно, что они несут противоположный смысл, это своего рода антонимы.

Итак, «валидный» — это значит правильный, действующий, достоверный. К примеру, если ваш аккаунт валидный, то значит он действующий, рабочий.

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

Валидные и невалидные значения в тестировании



0



0

Русский Язык — рулеззз! :)

«валидный/невалидный» от английского valid (допустимый, действительный, приемлемый) и его антоним invalid (не допустимый, не дуйствительный, не приемлемый)

Валидные и невалидные значения в тестировании



0



0

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

Валидные и невалидные значения в тестировании



0



0

Слова пришли к нам из английского языка. А именно: от слова «valid». Оно переводится так:

  • имеющий силу;
  • действительный, действующий;
  • достоверный, обоснованный.

А «невалидный» — все то же самое с приставкой «не».

<hr />

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

Читайте также

Валидные и невалидные значения в тестировании

Наверное, падший это слово можно отнести ко всем:

NKS7UZyaA3rHikeB8YfXKmHg2SQXqsL.png

Падшая женщина

SLxwM0Tqioz068kAjBycgJxzSadh7rny.png

Падший мужчина

VsLcpbslKNZ2WOLs3Xnk5v0XZQmj11j.png

Слово «падшие» —

RSF4Z4fX6uEGMgTNPEYIZrRlyUVXOD0.png

Валидные и невалидные значения в тестировании

Валидные и невалидные значения в тестировании

Валидные и невалидные значения в тестировании

Ну а вот пример падшего мужчины…Чем не пример,а?

Валидные и невалидные значения в тестировании

настолько падший, что падать уже ниже и некуда. Так что и мужчины «падают», не только ангелы и женщины)

Валидные и невалидные значения в тестировании

Здание предназначено для жизни или деятельности людей. Например, детский сад, школа, жилой дом, университет. То есть, это то же сооружение, но только предназначенное для «обитания» в нём людей.

Примеры зданий.

Валидные и невалидные значения в тестировании

Валидные и невалидные значения в тестировании

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

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

Валидные и невалидные значения в тестировании

Валидные и невалидные значения в тестировании

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

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

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

Валидные и невалидные значения в тестировании

Что, собственно, сделал Хам, чтобы его имя осталось нарицательным в веках? Он обнаружил, что у его отца Ноя, когда тот спал в саду, сползла набедренная повязка. Вместо того, чтобы тихо поправить повязку, Хам позвал младших братьев и, показывая на обнажённого спящего отца, стал смеяться над ним.

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

Валидные и невалидные значения в тестировании

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

Невалидный. Это понятие является противоположным понятию «валидный». Невалидный – значит недействующий, некорректный, неправильный, несоответствующий требованиям.

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

НЕВАЛИДНЫЙ, не соответствующий определенным требованиям или условиям, неправильный. НЕВАЛИДНЫЙ, не соответствующий определенным требованиям или условиям, неправильный.

Что значит должен быть валидным?

Это значит, что Вам нужно ввести правильную почту. Правильный (валидный) e-mail — это адрес почты, который содержит в себе определенную последовательность допустимых символов. При этом, почта не обязательно должна существовать. … Эту часть задаете Вы при создании e-mail.

Что такое валидность?

соответствующий требованиям; достоверный ◆ Валидным является такое высказывание, которое — в силу различных причин — включается в открытый для социума дискурс.

Что такое валидный документ?

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

Что значит не валидный аккаунт?

Невалидный аккаунт — это недействующий аккаунт. (подтверждение номера телефона, электронной почты и прочее). тоесть, акк должен проити проверку.

Что значит не валидный код?

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

Что значит Адрес Невалидный?

Локальная часть находится перед символом @, а доменная — после него. Например, в адресе [email protected] «ivan. ivanov» — это локальная часть, а «company.com» — доменная. Если хотя бы одна из этих частей отсутствует, имейл адрес автоматически считается невалидным.

Что значит email должен быть валидным?

Валидный адрес электронной почты — существующий и действующий e-mail адрес. Адрес электронной почты — запись, установленная по RFC 2822, однозначно идентифицирующая почтовый ящик, в который следует доставить сообщение электронной почты.

Что такое валидность простыми словами?

validity, от лат. validus — «сильный, здоровый, достойный») — обоснованность и пригодность применения методик и результатов исследования в конкретных условиях. Более прикладное определение понятия «валидность» — мера соответствия методик и результатов исследования поставленным задачам.

Что такое валидность методов психологического исследования?

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

Как понять валидный номер телефона?

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

Что значит пароль валидный?

В английский это слово попало из латинского «validus», что означает «крепкий», «сильный». Синоним слова Валидный: действительный, действующий, веский, уважительный, юридически действительный, правомерный, надлежаще оформленный (част.) Пример: Пожалуйста, введите валидный e-mail.

Что такое валидный XML?

Создание валидных XML-документов

Валидным (valid) называется корректно сформированный (well-formed) документ, отвечающий двум дополнительным требованиям: Пролог документа должен содержать определение типа документа (DTD — Document Type Definition), задающее структуру документа.

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

Валидный HTML-код, валидная разметка — это HTML-код, который написан в соответствии с определёнными стандартами. Их разработал Консорциум Всемирной Паутины — World Wide Web Consortium (W3C). … Так и с валидностью кода.

Невалидный емейл-адрес

Невалидное задание

Невалидное название

? ? ?

Заимствованные слова, пришедшие к нам из английского языка, валидный и невалидный, на самом деле имеют простейшее объяснение или перевод — валидный — правильный, корректный, работающий и т.д. Невалидный соответственно — неправильный, некорректный, неработающий.

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

В английском, кстати, невалидный звучит, как инвалид invalid, что и без перевода понятно. Что значит инвалид знают все.

автор вопроса выбрал этот ответ лучшим

Аалек­сей
[33.3K]

4 года назад

Последнее время эти понятия стали очень популярны.

Валидный — это правильный, действующий, действительный.

Невалидный — это недействующий, непригодный, негодный, недействительный, недоступный, закрытый.

Есфир­ь
[77.6K]

4 года назад

Такие термины можно встретить в интернете. Я эти термины понимаю так:

Невалидный емейл-адрес — это недействующий, закрытый емейл-адрес. Его могут закрыть если им долго не пользоваться.

Невалидное задание — это не качественное задание или не проверенное модератором задание.

Невалидное название — это неправильное название, название, которое нарушает установленные правила.

На просторах интернета еще можно встретить термин невалидный аккаунт. Невалидный аккаунт — это недействующий аккаунт. Возможно этот аккаунт должен пройти проверку(подтверждение номера телефона, электронной почты и прочее).

Ксарф­акс
[155K]

3 года назад

Валидный.

Это значит действующий, соответствующий определённым требованиям, нормам, правилам, стандартам.

Например, для вёрстки сайтов существуют правила и нормы, разработанные Консоциумом Всемирной Паутины.

Проверить сайт на соответствие данным правилам можно здесь.

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


Невалидный.

Это понятие является противоположным понятию «валидный».

Невалидный — значит недействующий, некорректный, неправильный, несоответствующий требованиям.

Например:

  • Невалидный e-mail означает, что адрес электронной почты вообще не существует или не соответствует стандартному формату. Примеры невалидных почтовых адресов — zxcmail.ru, vvr@mailru.

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


Также добавлю, что понятия «валидный» и «невалидный» имеют иностранные корни.

Так в английском языке имеется слово «valid», а во французском — «valide».

Переводятся они так: «действительный», «допустимый».

Ninaa­rc
[424K]

4 года назад

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

Например, невалидный аккаунт означает, что аккаунт в настоящее время не работает. Невалидное задание — задание неправильное, невалидная почта — недействующая, невалидные данные — недостоверные данные.

Влади­мир Apche­l
[236K]

3 года назад

Валидный и невалидный это прилагательные:

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

Невалидный — неправильный, нерабочий, недопустимый.

Пример использования слова: «Если параметр не указан, то создается невалидный объект, который ни на что не указывает.»

Веб-услуга — Проверка валидности e-mail адресов:

проверка валидности емейл адресов, валидный-невалидный, значение слова валидный

Алиса в Стран­е
[334K]

2 года назад

Конечно, с этим словом мы так или иначе все знакомы — именно от английского слова «valid» произошло известное всем нам слово «инвалид», уже даже по одному этому слову мы можем составить какое-то начальное представление о значении терминов «валидный» или, напротив, «невалидный». Давайте посмотрим перевод слова «valid»:

Валидные и невалидные значения в тестировании

Эти значения как раз и будут значениями термина «валидный» — действительный, правомерный, допустимый, соответствующий. И противоположными будут значения термина «невалидный» (в зависимости от контекста) — недействительный, недопустимый, несоответствующий, неправильный, недействующий, непригодный, неактуальный.

Невалидный e-mail адрес — нерабочий, несуществующий, недействующий, недействительный;

Невалидное задание — некорректное, неправильное, неактуальное;

Невалидное название — неправильное, недопустимое, некорректное, несоответствующее чему-то.

Барха­тные лапки
[346K]

2 года назад

Действительно, сейчас часто встречаются такие слова, как «валидный» и «невалидный». Чаще всего эти слова связаны с интернетом.

Уже с самого звучания этих слов понятно, что они несут противоположный смысл, это своего рода антонимы.

Итак, «валидный» — это значит правильный, действующий, достоверный. К примеру, если ваш аккаунт валидный, то значит он действующий, рабочий.

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

Alex-molod­ec
[138]

6 лет назад

Действительное/недействительное значение

Shipo­3
[32.7K]

4 года назад

Слова пришли к нам из английского языка. А именно: от слова «valid». Оно переводится так:

  • имеющий силу;
  • действительный, действующий;
  • достоверный, обоснованный.

А «невалидный» — все то же самое с приставкой «не».


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

worke­r2312
[14.5K]

5 лет назад

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

GenTo­s
[51.1K]

6 лет назад

Русский Язык — рулеззз! :)

«валидный/невалидный» от английского valid (допустимый, действительный, приемлемый) и его антоним invalid (не допустимый, не дуйствительный, не приемлемый)

Знаете ответ?

Понравилась статья? Поделить с друзьями:
  • Ошибка не1 стиральной машины самсунг эко бабл
  • Ошибка не1 стиральной машины самсунг diamond
  • Ошибка не является файлом вин 32
  • Ошибка не является приложением вин 32
  • Ошибка не является приложением win32 как исправить