1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/didiopensource-slime-validator

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
index.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 16:38 80d0aa3

Более простой в использовании 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/didiopensource-slime-validator.git
git@api.gitlife.ru:oschina-mirror/didiopensource-slime-validator.git
oschina-mirror
didiopensource-slime-validator
didiopensource-slime-validator
master