Потрясающий модуль сообщества

валидаторjs

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

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

Зачем использовать валидаторы?

  • Не зависит от каких-либо библиотек.
  • Работает как в браузере, так и в 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} — данные, которые вы хотите проверить.

правила {Объект} — правила проверки

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

WildCards также могут быть проверены.

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:дата

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

альфа

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

альфа_даш

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

альфа_номер

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

множество

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

до:дата

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

before_or_equal:дата

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

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

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

логическое значение

Проверяемое поле должно быть логическим значением вида true, false, 0, 1, 'true', 'false', '0', '1',

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

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

дата

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

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

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

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

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

электронная почта

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

шестигранник

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

в:фу,бар,...

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

целое число

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

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

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

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

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

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

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

not_in:foo,бар,...

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

числовой

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

необходимый

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

требуется_если: другое поле, значение

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

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

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

require_with:foo,bar,...

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

require_with_all:foo,bar,...

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

требуется_без:foo,bar,...

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

require_without_all:foo,bar,...

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

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

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

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

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

нить

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

URL

Убедитесь, что атрибут имеет действительный формат URL.

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

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

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

Пример 3. Проверка регулярных выражений

1 2 3 4 5 6 7 8 9 10 11 12
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
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} — необязательная строка, в которой можно указать собственное сообщение об ошибке. :attribute внутри 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

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

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

.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);