Замечательный модуль сообщества

валидатор

Статус сборки

Библиотека validatorjs упрощает проверку данных в JavaScript как в браузере, так и в Node.js. Эта библиотека была вдохновлена Validator фреймворка Laravel .

Зачем использовать validatorjs?

  • Не зависит от каких-либо библиотек.
  • Работает как в браузере, так и в Node.
  • Читаемые и декларативные правила проверки.
  • Сообщения об ошибках с многоязычной поддержкой.
  • Поддержка AMD / Require.js и CommonJS / Browserify.

Установка

Возьмите validatorjs из Bower, NPM или каталога / dist на Github:

1
bower install validatorjs
1
npm install validatorjs

Browser

1
<script src="validator.js"></script>

Node.js / Browserify

1
let Validator = require('validatorjs');

Basic Usage

1
let validation = new Validator(data, rules [, customErrorMessages]);

data {Object} - данные, которые вы хотите проверить

rules {Object} -Правила проверки

customErrorMessages {Object} - дополнительные настраиваемые сообщения об ошибках для возврата

Пример 1 - прохождение проверки

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
let data = { name: 'John', email: 'johndoe@gmail.com', age: 28 }; let rules = { name: 'required', email: 'required|email', age: 'min:18' }; let validation = new Validator(data, rules); validation.passes(); // true validation.fails(); // false

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

Пример 2 - неудачная проверка

1 2 3 4 5 6 7 8 9 10 11 12 13 14
let validation = new Validator({ name: 'D', email: 'not an email address.com' }, { name: 'size:3', email: 'required|email' }); validation.fails(); // true validation.passes(); // false // Error messages validation.errors.first('email'); // 'The email format is invalid.' validation.errors.get('email'); // returns an array of all email error messages

Nested Rules

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

1 2 3 4 5 6 7 8 9 10
let data = { name: 'John', bio: { age: 28, education: { primary: 'Elementary School', secondary: 'Secondary School' } } };

Мы могли бы объявить наши правила проверки следующим образом:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
let nested = { name: 'required', bio: { age: 'min:18', education: { primary: 'string', secondary: 'string' } } }; // OR let flattened = { 'name': 'required', 'bio.age': 'min:18' 'bio.education.primary': 'string', 'bio.education.secondary': 'string' };

WildCards Rules

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

1 2 3 4 5 6 7 8 9 10 11 12
let data = { users: [{ name: 'John', bio: { age: 28, education: { primary: 'Elementary School', secondary: 'Secondary School' } } }] };

Мы могли бы объявить наши правила проверки следующим образом:

1 2 3 4 5 6
let rules = { 'users.*.name': 'required', 'users.*.bio.age': 'min:18' 'users.*.bio.education.primary': 'string', 'users.*.bio.education.secondary': 'string' };

Available Rules

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

принято

В проверяемом поле должно быть указано «да», «включено», «1» или «истина». Это полезно для подтверждения принятия «Условий использования».

после: дата

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

after_or_equal: дата

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

альфа

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

alpha_dash

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

alpha_num

Проверяемое поле должно состоять полностью из буквенно-цифровых символов.

множество

Проверяемое поле должно быть массивом.

до: дата

Проверяемое поле должно быть до указанной даты.

before_or_equal: дата

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

между: мин., макс.

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

логический

Под ДОЛЖНО БЫТЬ поле Проверка Значения булевой Формы true, false, 0, 1, 'true', 'false', '0', '1',

подтвержденный

Проверяемое поле должно иметь совпадающее поле foo_confirmation.Например, если проверяемое поле является паролем, соответствующее поле password_confirmation должно присутствовать во входных данных.

Дата

Проверяемое поле должно иметь допустимый формат даты, приемлемый для Dateобъекта Javascript .

цифры: значение

Проверяемое поле должно быть числовым и иметь точную длину значения.

другое: атрибут

Данное поле должно отличаться от проверяемого поля.

Эл. адрес

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

шестнадцатеричный

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

в: foo, bar, ...

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

целое число

Проверяемое поле должно иметь целочисленное значение.

макс: значение

Убедитесь, что атрибут не больше заданного размера

Примечание. Включено максимальное количество чеков.

мин: значение

Убедитесь, что атрибут имеет хотя бы заданный размер.

Примечание: минимальные чеки включены.

not_in: foo, bar, ...

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

числовой

Убедитесь, что атрибут является числовым. Строковое представление числа пройдет.

требуется

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

required_if: другое поле, значение

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

required_unless: другое поле, значение

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

required_with: foo, bar, ...

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

required_with_all: foo, bar, ...

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

required_without: foo, bar, ...

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

required_without_all: foo, bar, ...

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

то же самое: атрибут

Данное поле должно соответствовать проверяемому полю.

размер: значение

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

нить

Проверяемое поле должно быть строкой.

url

Убедитесь, что атрибут имеет допустимый формат URL

регулярное выражение: шаблон

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

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

Пример 3 - проверка регулярного выражения

1 2 3 4 5 6 7 8 9 10 11 12 13
let validation = new Validator({ name: 'Doe', salary: '10,000.00', yearOfBirth: '1980' }, { name: 'required|size:3', salary: ['required', 'regex:/^(?!0\\.00)\\d{1,3}(,\\d{3})*(\\.\\d\\d)?$/'], yearOfBirth: ['required', 'regex:/^(19|20)[\\d]{2,2}$/'] }); validation.fails(); // false validation.passes(); // true

Пример проверки достоверности 4-го типа

1 2 3 4 5 6 7 8 9 10 11
let validation = new Validator({ age: 30, name: '' }, { age: ['required', { 'in': [29, 30] }], name: [{ required_if: ['age', 30] }] }); validation.fails(); // true validation.passes(); // false

Register Custom Validation Rules

1
Validator.register(name, callbackFn, errorMessage);

name {String} -Название правила.

callbackFn {Function} - возвращает логическое значение, представляющее успешную или неудачную проверку.

errorMessage {String} - Необязательная строка, в которой вы можете указать собственное сообщение об ошибке .: атрибут внутри errorMessage будет заменен именем атрибута.

1 2 3
Validator.register('telephone', function(value, requirement, attribute) { // requirement parameter defaults to null return value.match(/^\d{3}-\d{3}-\d{4}$/); }, 'The :attribute phone number is not in the format XXX-XXX-XXXX.');

Asynchronous Validation

Зарегистрируйте асинхронное правило, которое принимает passesобратный вызов:

1 2 3 4 5 6
Validator.registerAsync('username_available', function(username, attribute, req, passes) { // do your database/api checks here etc // then call the `passes` method where appropriate: passes(); // if username is available passes(false, 'Username has already been taken.'); // if username is not available });

Затем вызовите свой валидатор, передав обратный вызов failsили passesпримерно так:

1 2 3 4 5 6 7 8 9 10 11 12 13
let validator = new Validator({ username: 'test123' }, { username: 'required|min:3|username_available' }); validator.passes(function() { // Validation passed }); validator.fails(function() { validator.errors.first('username'); });

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

Error Messages

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

Если есть ошибки, объект свойства errors экземпляра Validator будет заполнен сообщениями об ошибках для всех ошибочных атрибутов. Методы и свойства объекта свойства errors :

.first (атрибут)

возвращает первое сообщение об ошибке для атрибута, иначе false

.get (атрибут)

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

.все()

возвращает объект, содержащий все сообщения об ошибках для всех ошибочных атрибутов

.has (атрибут)

возвращает true, если для атрибута существуют сообщения об ошибках, иначе false

.errorCount

количество ошибок валидации

1 2 3
let validation = new Validator(input, rules); validation.errors.first('email'); // returns first error message for email attribute validator.errors.get('email'); // returns an array of error messages for the email attribute

Custom Error Messages

Если вам нужно конкретное сообщение об ошибке, и вы не хотите переопределять сообщение по умолчанию, вы можете передать переопределение в качестве третьего аргумента объекту Validator, как и в случае с Laravel .

1 2 3 4 5 6 7 8 9 10
let input = { name: '' }; let rules = { name : 'required' }; let validation = new Validator(input, rules, { required: 'You forgot to give a :attribute' }); validation.errors.first('name'); // returns 'You forgot to give a name'

У некоторых валидаторов есть строковая и числовая версии, их тоже можно изменить.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
let input = { username: 'myusernameistoolong' }; let rules = { username : 'max:16' }; let validation = new Validator(input, rules, { max: { string: 'The :attribute is too long. Max length is :max.' } }); validation.errors.first('username'); // returns 'The username is too long. Max length is 16.'

Вы даже можете предоставлять сообщения об ошибках для каждого атрибута! Просто установите ключ сообщения на'validator.attribute '

1 2 3 4 5 6 7 8 9
let input = { name: '', email: '' }; let rules = { name : 'required', email : 'required' }; let validation = new Validator(input, rules, { "required.email": "Without an :attribute we can't reach you!" }); validation.errors.first('name'); // returns 'The name field is required.' validation.errors.first('email'); // returns 'Without an email we can\'t reach you!'

Custom Attribute Names

Чтобы отображать настраиваемое «понятное» имя атрибута в сообщениях об ошибках, используйте .setAttributeNames()

1 2 3 4 5
let validator = new Validator({ name: '' }, { name: 'required' }); validator.setAttributeNames({ name: 'custom_name' }); if (validator.fails()) { validator.errors.first('name'); // "The custom_name field is required." }

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

Вы также можете настроить настраиваемое средство форматирования атрибутов:

1 2 3 4 5 6 7 8 9 10 11 12 13
// Configure global formatter. Validator.setAttributeFormatter(function(attribute) { return attribute.replace(/_/g, ' '); }); // Or configure formatter for particular instance. let validator = new Validator({ first_name: '' }, { first_name: 'required' }); validator.setAttributeFormatter(function(attribute) { return attribute.replace(/_/g, ' '); }); if (validator.fails()) { console.log(validator.errors.first('first_name')); // The first name field is required. }

Примечание: по умолчанию все символы _ будут заменены пробелами.

Language Support

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

1 2 3 4 5
<script src="dist/validator.js"></script> <script src="dist/lang/ru.js"></script> <script> Validator.useLang('es'); </script>

В Node он автоматически выбирает языковые исходные файлы.

1 2
let Validator = require('validatorjs'); Validator.useLang('ru');

Если вы не видите поддержки для своего языка, добавьте ее в src/lang!

Вы также можете добавить свой собственный язык, позвонив setMessages:

1 2 3
Validator.setMessages('lang_code', { required: 'The :attribute field is required.' });

Получите необработанный объект сообщений для данного языка:

1
Validator.getMessages('lang_code');

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

1
Validator.useLang('lang_code');

Получите используемый язык по умолчанию:

1
Validator.getDefaultLang(); // returns e.g. 'en'

Отменить сообщения по умолчанию для языка:

1 2 3
let messages = Validator.getMessages('en'); messages.required = 'Whoops, :attribute field is required.'; Validator.setMessages('en', messages);