Более простой в использовании JS-валидатор
Slime-validator — это библиотека, объединяющая основные возможности существующих валидаторов и предоставляющая более простой и удобный способ проверки данных. По сравнению с другими библиотеками, она позволяет сократить объём кода, связанного с проверкой, на 20%, а в случае сложных проверок параметров — даже на 30% (здесь речь идёт исключительно о сравнении общего количества букв в коде). Кроме того, библиотека поддерживает «связанную проверку» полей, что позволяет использовать более сложные функции проверки, которые редко поддерживаются другими валидаторами. Особенно это касается validatorjs, где часто требуется самостоятельная перекомпоновка.
Использование
Slime-validator может применяться как на бэкенде, так и на фронтенде, но изначально он был разработан для бэкенда, поскольку на фронтенде в большинстве случаев используются antd или elementUI, которые уже имеют встроенные валидаторы.
npm i slime-validator -save
Также предоставляется возможность прямого импорта через тег script, однако отсутствует публикация CDN, поэтому необходимо самостоятельно решать проблему с источником импорта.
У Slime-validator есть два способа проверки: создание нового объекта Validator каждый раз или использование функции Validator.validate для передачи правил проверки и проверяемого объекта. Это похоже на использование других валидаторов.
import Validator from 'slime-validator'
// Способ использования 1
const V1 = new Validator({ Required:true })
console.log(V1.validate('Hello world')) // вывод: null
console.log(V1.validate()) // вывод: Input is required
// Способ использования 2
console.log(Validator.validate({ Required:true }, 'Hello world')) // вывод: null
console.log(Validator.validate({ Required:true }, null)) // вывод: Input is required
Проверка объектов является распространённым требованием. Slime-validator, естественно, также должен поддерживать эту функцию.
import Validator from 'slime-validator'
// Проверка объекта
const V2 = new Validator({
username: { Required: true, MinLength: 3 }, // имя пользователя обязательно и не менее 3 символов
age: { Required: true, MinNum: 18 }, // возраст обязателен и должен быть больше 18 лет
address: { MaxLength: 10 } // адрес необязателен, максимальная длина 10 символов
})
console.log(V2.validate({
username: 'ryouaki',
age: 17
})) // вывод: { age: 'Min value of age is 18' }
Можно также напрямую использовать Validator.validate для проверки.
В сложных бизнес-сценариях объекты, подлежащие проверке, могут быть очень сложными. В этом случае для validatorjs потребуется дополнительная упаковка, а async-validator потребует дополнительных полей для идентификации типа проверяемого объекта.
Однако в Slime-validator достаточно одного поля $fields для выполнения всех функций, и внутренняя система автоматически распознаёт, является ли объект объектом, данными или объектом с массивом, что позволяет разработчикам писать меньше кода. Чем сложнее проверяемый объект, тем больше пользы от этой библиотеки.
// Связанная проверка объекта
const V3 = new Validator({
person: {
$fields: {
height: { Required: true },
age: { Required: true },
weight: { Required: true }
}
}
})
console.log(V3.validate({
person: {
height: 175,
age: 18
}
})) // вывод: {"person":{"weight":"weight is required"}}
// Связанная проверка массива
const V4 = new Validator({
persons: {
MinLength: 2,
$fields: {
name: { Required: true }
}
}
})
console.log(V4.validate({
persons: []
})) // вывод: {"persons":"Min length of persons is 2"}
console.log(V4.validate({
persons: [{},{name: "太君是我,别开枪"},{}] // индекс 1 элемента имеет name, поэтому информация об ошибке равна нулю
})) // вывод: {"persons":[{"name":"name is required"},null,{"name":"name is required"}]}
Можно также непосредственно использовать Validator.validate для проверки.
Здесь, когда объект, который нужно проверить, является массивом, необходимо заполнить его нулями для компенсации пробелов, в то время как другие библиотеки, на которые можно ссылаться, имеют относительно слабую поддержку в этой области, поэтому в настоящее время нет хорошей идеи.
Хотя правила проверки обычно одинаковы, сообщения об ошибках могут отличаться, или в большинстве случаев сообщения об ошибках одинаковы, но правила проверки могут немного отличаться. В этом случае мы можем передать параметры message и validate для настройки.
// Использование пользовательских сообщений для замены правил по умолчанию
const V5 = new Validator({
field: {Required: true, message: 'Я — сообщение'}
})5
console.log(V5.validate({
})) // вывод: { field: 'Я — сообщение' }
// Использование настраиваемых правил для замены правил по умолчанию
const V6 = new Validator({
field: {Required: true, validate(field, value, opts) {
return false // всегда сбой проверки
}}
})
console.log(V6.validate({
field: "У меня есть данные"
})) // вывод: { поле: 'поле обязательно' }
Можно также использовать Validator.validate для непосредственной проверки.
Предоставленные по умолчанию правила проверки часто трудно удовлетворить всем бизнес-сценариям, и в конкретных бизнес-процессах также желательно иметь некоторые правила, которые могут многократно использоваться. Поэтому Slime-validator предоставляет возможности плагинов, и после регистрации плагина глобально доступные правила могут использоваться во всём проекте. Это аналогично плагинам Vue. Как только компонент используется, он может быть использован в любом месте.
// Пользовательское правило проверки плагинов
Validator.usePlugin({
tagName: 'IsNotRequired',
message(field, value, opts) {
// field — это имя поля проверки, value — текущее значение поля, opts — дополнительная информация, включая tagName, текущее имя правила, tagValue текущего значения правила, root, объект проверки, parent, текущий родительский объект верхнего уровня значения проверки.
return `${field} проверка не пройдена`
},
validate(field, value, opts) {
вернуть ложь
}
}, true) // Передав второй параметр true, можно перезаписать существующие правила проверки с тем же именем.
const V7 = new Validator({
поле: { IsNotRequired: true }
})
console.log(V7.validate({
поле: "у меня есть данные"
})) // вывод: { поле: 'проверка поля не пройдена' }
Можно также использовать Validator.validate для прямой проверки.
Согласно различным странам, выберите различные типы связанных проверок.
// type_rules.js
import Validator from 'slime-validator';
Validator.usePlugin({
tagName: "CheckType", // зарегистрировать правило проверки CheckType
message(field, value, opts) {
``` ```
const { tagValue, parent } = opts; // через parent мы можем легко получить зависимый родительский объект.
return `текущее значение ${value}, допустимое значение ${tagValue[parent.country]}`;
},
validate(field, value, opts) {
const { tagValue, parent } = opts;
return tagValue[parent.country].indexOf(value) > -1;
}
})
// TypeController.js
const rules = {
country: {
Required: true,
Enum: ["CN", "USA", "JP"], message: "неверный тип страны" // поле страны может быть только "CN", "USA" или "JP".
},
type: { Required: true, CheckType: {
CN: [1, 3],
USA: [1, 2, 3],
JP: [2, 3]
}}
}
const V = new Validator(rules);
// CN
console.log("CN", JSON.stringify(Validator.validate(rules, {
country: "CN",
type: 1
})));
console.log("CN", JSON.stringify(V.validate({
country: "CN",
type: 2
})));
// USA
console.log("USA", JSON.stringify(Validator.validate(rules, {
country: "USA",
type: 1
})));
console.log("USA", JSON.stringify(V.validate({
country: "USA",
type: 2
})));
// JP
console.log("JP", JSON.stringify(Validator.validate(rules, {
country: "JP",
type: 1
})));
console.log("JP", JSON.stringify(V.validate({
country: "JP",
type: 2
})));
new Validator
, объём кода будет меньше, поэтому рекомендуется использовать этот способ.$ CN null
$ CN {"type":"текущее значение 2, допустимое значение 1,3"}
$ USA null
$ USA null
$ JP {"type":"текущее значение 1, допустимое значение 2,3"}
$ JP null
В настоящее время существует несколько встроенных правил проверки, которые можно найти в документации по API здесь.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )