Pull to refresh
  • by relevance
  • by date
  • by rating

Знакомство с Bean Validation API

Java*
Не так давно в Яве не существовало стандарта, описывающего способ валидации данных. Каждый выкручивался как мог, писались (и пишутся) свои поделки а так же используются некоторые возможности широко распространенных сервисов как Spring или Hibernate. Наибольшей проблемой было то, что валидация могла быть реализована отдельно от предметной модели и быть редунданто расбросанной по фронт- и бэкэнду. Теперь, при помощи стандарта JSR 303: Bean Validation (практически это явлается стандартизированным валидатором Hibernate) становится возможным следовать принципу «Don't Repeat Yourself»: объявлять ограничения для данных прямо в предметной модели и валидировать данные где угодно, хоть на сервере, хоть в десктопном приложении.

Под катом маленький пример использования
Total votes 36: ↑34 and ↓2+32
Views63K
Comments 21

Эссе о валидации данных

IT systems testing*
В заметке «Можно ли делить на 0,01 ?» на сайте тестировщиков я написал, что при тестировании нужно проверять согласованность валидаторов входных данных с логикой обработки этих данных приложением. Но из комментариев к этой заметке я понял, что для понимания того, как надо тестировать валидацию данных, надо понимать, как она должна работать, что можно считать правильным, а что нет. Поэтому я написал об этом отдельную статью. В ней рассматривается три вопроса: 1) зачем вообще нужна валидация данных, и 2) где и когда может выполняться валидация данных, 3) какие бывают разновидности проверок. Ну и конечно продемонстрировано, как всё это выглядит на живых примерах. А может быть мои рассуждения окажутся интересны не только тестировщикам, но и разработчикам.
Читать дальше →
Total votes 44: ↑37 and ↓7+30
Views22K
Comments 3

Полноценная валидация данных

Lumber room
Проблема валидации данных не раз поднималась на Хабре. Обсуждались серверная валидация и валидация на стороне клиента. Описывалось применение для этой цели различных фреймворков таких как Yii, CodeIgniter, Vanadium, .NET и плагинов JQuery.
Но не было комплексного взгляда на эти проблемы, как на логически единую задачу как для сервера, так и для клиента.
Валидация данных должна быть прозрачной не зависимо от того, где она проходит — на клиенте или на сервере, не нужно разбивать ее на две отдельных части и делать отдельную реализацию для каждой из задач. После нескольких проектов и выполнения одной и той же работы приходит понимание, что как было бы хорошо объединить эти части вместе и не тратить свое драгоценное время на фактическое дублирование кода.
Итак, вопрос ставится как создание прозрачной системы валидации данных без логического разделения на клиента и сервера. Валидация на стороне сервера должна автоматически обеспечивать валидацию на стороне клиента без дополнительных усилий со стороны программиста.
Читать дальше →
Total votes 8: ↑5 and ↓3+2
Views1.9K
Comments 5

Обработка заполняемой пользователем формы: как уменьшить сложность кода?

Website development*
Sandbox
Работая над написанием административного, да и пользовательского интерфейса, я не раз ловил себя на мысли — а все ли я делаю так, чтобы при минимуме усилий обеспечить оптимальное качество?

Сегодня хотелось бы обсудить вопрос обработки ошибок ввода форм в веб-приложениях.
Читать дальше →
Total votes 11: ↑4 and ↓7-3
Views2.7K
Comments 11

Валидация в Yii

Yii*
Доброго времени суток. Сегодня мне хотелось бы разобрать такую интересную возможность Yii Framework, как валидация данных моделей. На момент написания статьи актуальная версия фреймворка 1.1.10, собственно рассматривать валидацию на ней и будем.
Хочу сразу сказать, что мне не хочется перепечатывать мануалы и API, поэтому я по возможности буду ссылаться на готовые источники. Кроме того, я не буду описывать то, как пользоваться валидаторами. Я постараюсь раскрыть механизм валидации моделей Yii на основе правил валидации, чтобы используя их вы понимали что же на самом деле происходит и где в случае чего можно искать ошибки.
Читать дальше →
Total votes 23: ↑19 and ↓4+15
Views33K
Comments 14

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

JavaScript*jQuery*
Sandbox
Данный плагин для jQuery позволяет автоматически подбирать подходящую маску ввода на основе введённого начала телефонного номера. Это позволяет сделать ввод номера телефона на странице web-cайта более быстрым и безошибочным. Кроме того, разработанный плагин может быть использован в других областях, если правила ввода возможно представить в виде нескольких масок ввода.
Читать дальше →
Total votes 35: ↑34 and ↓1+33
Views144K
Comments 56

LIVR — «независимые от языка правила валидации» или валидация данных без «проблем»

Perl*Website development*PHP*Python*JavaScript*
Каждый программист неоднократно сталкивался с необходимостью проверки пользовательского ввода. Занимаясь веб-разработкой уже более 10 лет, я перепробовал массу библиотек, но так и не нашел той единственной, которая решала бы поставленные мною задачи.

Основные проблемы, которые встречаются в библиотеках валидации данных

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

Проблема №2. Процедурное описание правил валидации. Я не хочу каждый раз думать про алгоритм валидации, я просто хочу описать декларативно, как должны выглядеть правильные данные. По сути, я хочу задать схему данных (почему не «JSON Schema» — в конце поста).

Проблема №3. Описание правил валидации в виде кода. Казалось бы, это не так страшно, но это сразу сводит на нет все попытки сериализации правил валидации и использования одних и тех же правил валидации на бекенде и фронтенде.

Проблема №4. Валидация останавливается на первом же поле с ошибкой. Такой подход не дает возможности подсветить сразу все ошибочные/обязательные поля в форме.

Проблема №5. Нестандартизированные сообщения об ошибках. Например, «Field name is required». Такую ошибку я не могу показать пользователю по ряду причин:
  • поле в интерфейсе может называться совсем по другому
  • интерфейс может быть не на английском
  • нужно различать тип ошибки. Например, ошибки на пустое значение показывать специальным образом

То есть, нужно возвращать не сообщение об ошибках, а стандартизированные коды ошибок.

Проблема №6. Числовые коды ошибок. Это просто неудобно в использовании. Я хочу, чтобы коды ошибок были интуитивно понятны. Согласитесь, что код ошибки «REQUIRED» понятней, чем код «27». Логика аналогична работе с классами исключений.

Проблема №7. Нет возможности проверять иерархические структуры данных. Сегодня, во времена разных JSON API, без этого просто не обойтись. Кроме самой валидации иерархических данных, нужно предусмотреть и возврат кодов ошибок для каждого поля.

Проблема №8. Ограниченный набор правил. Стандартных правил всегда не хватает. Валидатор должен быть расширяемый и позволять добавлять в него правила любой сложности.

Проблема №9. Слишком широкая сфера ответственности. Валидатор не должен генерировать формы, не должен генерировать код, не должен делать ничего, кроме валидации.

Проблема №10. Невозможность провести дополнительную обработку данных. Практически всегда, где есть валидация, есть необходимость в какой-то дополнительной (часто предварительной) обработке данных: вырезать запрещенные символы, привести в нижний регистр, удалить лишние пробелы. Особенно актуально — это удаление пробелов в начале и в конце строки. В 99% случаев они там не нужны. Я знаю, что я до этого говорил, что валидатор не должен делать ничего кроме валидации.

3 года назад, было решено написать валидатор, который не будет иметь всех вышеописанных проблем. Так появился LIVR (Language Independent Validation Rules). Есть реализации на Perl, PHP, JavaScript, Python (мы на python не пишем — фидбек по ней дать не могу). Валидатор используется в продакшене уже несколько лет практически в каждом проекте компании. Валидатор работает, как на сервере, так и на клиенте.
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Views21K
Comments 71

Фреймворк для валидации данных в iOS приложениях

Development for iOS*
«В нашей компании особое внимание мы уделяем качеству выпускаемого продукта», – шаблонная фраза, которую часто можно увидеть на сайтах компаний, предлагающих различные услуги, и не только в сфере IT. Однако то, как достигается качество программного продукта, скрыто от пользователей и волнует их только в моменты, когда что-то пошло не так. Одним из качественных показателей работы приложения является то, как оно реагирует на нестандартные действия пользователя. Для большинства клиент-серверных решений эти действия связаны с вводом данных. Далее мы опишем, какие решения для проверки данных используются среди iOS разработчиков в нашей команде.
Читать дальше →
Total votes 15: ↑11 and ↓4+7
Views6.5K
Comments 2

Держите данные под контролем

PHP*Symfony*Zend Framework*Yii*Laravel*
Не секрет, что пользовательским данным доверять нельзя. Поэтому однажды человек и придумал валидацию данных. Ну а я, интереса ради и пользы для, написал свою реализацию валидатора на PHP.
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Views11K
Comments 32

Валидировали, валидировали… и вывалидировали! Сравниваем валидаторы данных в PHP

Website development*PHP*Programming*

Изображение взято с сайта Michiana Stransportation (Bike Shops)


Если вы еще не в курсе, что такое Kontrolio, предлагаю прочесть первую часть — «Держите свои данные под контролем». Вкратце, это моя библиотека для валидации данных, написанная на PHP.

В предыдущей статье я обещал написать сравнение своей собственной библиотеки с другими имеющимися решениями, так что сегодня мы рассмотрим валидацию с помощью Aura.Filter, Respect Validation, Sirius Validation и Valitron.

Читать дальше →
Total votes 31: ↑29 and ↓2+27
Views18K
Comments 31

Визуальный генератор регулярных выражений

Website development*Programming*Regular expressions*
Sandbox
Все разработчики рано или поздно сталкиваются с регулярными выражениями. Практически в 100% случаев нам совершенно не нравится их составлять, считая это побочной работой, не связанной с программированием.

Большинство из нас, впервые столкнувшись с данной проблемой, начинают забивать в поисковых системах что-то типа: «regexp online generator» и к своему великому сожалению осознают что гугл сломался все результаты в поиске являются сервисами для проверки корректности уже составленного регулярного выражения (или я плохо гуглил).

А как же составить это самое регулярное выражение?


image

До недавнего времени существовало 2 ответа на этот вопрос:

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

Теперь, после нескольких месяцев разработки, рад представить и 3-й ответ:

» Генератор регулярных выражений

История


Давным давно, в одном проекте пришел довольно интересный и сложный запрос от внутренних пользователей. Персоналу технической поддержки нужно было самим задавать правила валидации для определенных полей, разным пользователям. Правила должны были часто и очень оперативно изменяться.
Читать дальше →
Total votes 70: ↑63 and ↓7+56
Views185K
Comments 66

Валидация емейл адресов для защиты от спам ботов на сайте

CleanTalk Anti-Spam corporate blogCMS*Information Security*Website development*
Электронная почта до сих пор остается одним из важнейших и эффективных элементов онлайн бизнеса и маркетинга и является наиболее эффективным каналом получения дохода. Поэтому для любого онлайн бизнеса и владельцев веб сайтов важно быть уверенным, что именно владелец емейла использовал его для регистрации/подписки, чтобы пользователь использовал свой реальный емейл адрес.



Есть несколько важных причин для этого.

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

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

В-третьих, пользователь, чей емейл был использован спамером для регистраций/подписки, отправит вашу рассылку в спам. В дальнейшем спамеры могут использовать этот емейл для отправки спама, брутфорса и т.д.
Читать дальше →
Total votes 13: ↑10 and ↓3+7
Views6.9K
Comments 33

Validators + Aspects: кастомизируем валидацию

Programming*Java*
Tutorial
Доброго времени суток, Хабр!

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

Проблема


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

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

Дергаем валидаторы


Спустя пару часов копания в гугле были найдены пару решений, самое адекватное из которых было заавтовайрить javax.validation.Validator и вызвать у него метод validate, которому в качестве параметра нужно передать валидируемый объект.

Казалось бы, решение найдено, но автовайрить везде валидатор не казалось хорошей идеей, хотелось более элегантного решения.

Добавляем АОП


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

Логика была примерно следующей: создаём аннотацию, и вешаем её над методом который преобразует один объект в другой. Дальше в аспекте перехватываем все методы помеченные этой аннотацией и вызываем метод validate для возвращаемого ими значения. Профит.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Views2.6K
Comments 0

Валидация форм во Vue.js

Website development*JavaScript*Programming*VueJS*
Привет, Хабр!

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

Vue.js содержит много интересных и необычных подходов к валидации, которые помогут решить ваши проблемы. Обзор под катом!

Читать дальше →
Total votes 22: ↑22 and ↓0+22
Views50K
Comments 9

Открытый вебинар «Fluent Validation как инструмент валидации данных»

OTUS corporate blogProgramming*C#*


И снова здравствуйте! В рамках запуска курса «Разработчик C#» мы провели традиционный открытый урок, посвящённый инструменту Fluent Validation. На вебинаре рассмотрели, как избавиться от кучи if-ов на примере проверки корректности заполнения данных покупателя, изучили внутреннюю реализацию библиотеки и способы применения подхода Fluent Interface на практике. Вебинар провёл Алексей Ягур, Team Lead в компании YouDo.


Читать дальше →
Total votes 19: ↑12 and ↓7+5
Views3.1K
Comments 4

Валидация данных в iOS приложениях

Development for iOS*Swift*
Sandbox

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


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


@Validated([validator1, validator2, ...])
var email: String? = nil

let errors =  $email.errors //массив ошибок валидации
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Views2.7K
Comments 2

Повышаем лояльность парсера серверных данных в iOS

Development for iOS*Swift*

При разработке мобильных приложений мы так или иначе сталкиваемся с необходимостью парсинга серверных данных во внутренние модели приложения. В подавляющем большинстве случаев эти данные приходят в формате JSON. Начиная со Swift 4 основным инструментом для парсинга JSON является использование протокола Decodable и объекта JSONDecoder.


Данный подход значительно упростил процесс парсинга данных и сократил количество boilerplate кода. В большинстве случаев достаточно просто создать модели со свойствами, названными также как и поля в JSON объекте и всю остальную работу JSONDecoder сделает за вас. Минимум кода, максимум пользы. Однако этот подход имеет один недостаток, а именно, крайне низкую лояльность парсера. Поясню. При любом несоответствии внутренней модели данных (Decodable объектов) тому, что пришло в JSON, JSONDecoder бросает ошибку и мы теряем весь объект целиком. Возможно, в некоторых ситуациях такая модель поведения предпочтительна, особенно, если речь идет, например, о финансовых операциях. Но во многих случаях было бы полезно сделать процесс парсинга более лояльным. В этой статье я бы хотел поделиться своим опытом и рассказать об основных способах повышения этой самой лояльности.

Читать дальше →
Total votes 2: ↑2 and ↓0+2
Views1.1K
Comments 4

Валидация данных в C++ с использованием библиотеки cpp-validator

Programming*Perfect code*C++*Designing and refactoring*
Sandbox


Казалось бы, валидация данных — это одна из базовых задач в программировании, которая встретится и в начале изучения языка вместе с "Hello world!", и в том или ином виде будет присутствовать в множестве зрелых проектов. Тем не менее, Google до сих пор выдает ноль релевантных результатов при попытке найти универсальную библиотеку валидации данных с открытым исходным кодом на C++.

Читать дальше →
Total votes 19: ↑19 and ↓0+19
Views4.3K
Comments 4

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

OTUS corporate blogNetwork technologies*
Translation

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

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

Читать далее
Total votes 6: ↑6 and ↓0+6
Views1.6K
Comments 0