New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More

@yorkjs/validator

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@yorkjs/validator

validate data


Version published
Weekly downloads
2
Maintainers
2
Weekly downloads
 
Created

validator

数据校验

安装

CDN

<script src="https://unpkg.com/@yorkjs/validator"></script>
<script>

</script>

NPM

npm install @yorkjs/validator
import { Validator } from '@yorkjs/validator'

YARN

yarn add @yorkjs/validator
import { Validator } from '@yorkjs/validator'

示例

import {
  Validator,
} from '@yorkjs/validator'

const validator = new Validator()

const errors = validator.validate(
  // 表单数据
  {
    nickname: 'xx',
    age: 101
  },
  // 校验规则
  {
    nickname: {
      type: 'string',
      min: 5,
      max: 10
    },
    age: {
      type: 'int',
      min: 18,
      max: 100
    }
  },
  // 错误信息
  {
    nickname: {
      type: '昵称类型错误',
      min: '昵称请不要少于 5 个字',
      max: '昵称请不要超过 10 个字'
    },
    age: {
      type: '年龄类型错误',
      min: '年龄最小为 18 岁',
      max: function (rule) {
        // 可配置函数,方便读取 rule 动态输出错误信息
        return '年龄最大为 ' + rule.max + ' 岁'
      }
    }
  }
)

// 如果没有错误,errors 为 undefined
// 如果有错误,格式如下:
{
  nickname: '昵称请不要少于 5 个字',
  age: '年龄最大为 100 岁'
}

内置验证规则

每种规则都支持 required 规则,即数据是否包含某个字段,默认为 true

string

  • type:必须是字符串类型
  • empty:可选,是否可以是 "",默认为 false
  • min: 可选,字符串长度的下限,类似至少输入 n 个字符
  • max: 可选,字符串长度的上限,类似最多输入 n 个字符
  • pattern: 可选,正则校验
  • custom: 可选,支持自定义验证函数
{
  type: 'string',
  empty: true,
  min: 5,
  max: 10000,
  pattern: /^\d+$/,
  custom: function (value) {
    if (value.length !== 6) {
      // 返回错误类型,只要能对应上错误信息中的 key 就行
      return 'custom'
    }
  }
}

integer(别名:int

  • type:必须是整数,浮点数会验证失败
  • min: 可选,整数的下限
  • max: 可选,整数的上限
{
  type: 'integer',
  min: 1,
  max: 100
}

number

  • type:可以是整数或浮点数,NaN 会验证失败
  • min: 可选,数字的下限
  • max: 可选,数字的上限
  • precision: 可选,浮点数的最大精度
{
  type: 'number',
  min: 1,
  max: 100,
  precision: 2
}

boolean(别名:bool

  • type:必须是布尔类型
  • value: 可选,强制为 truefalse
{
  type: 'boolean',
  value: true
}

enum

  • type:必须是 values 中的某一个
  • values: 枚举值
{
  type: 'enum',
  values: [1, 2, 3]
}

array

  • type:必须是数组类型
  • min: 可选,数组长度的下限
  • max: 可选,数组长度的上限
  • itemType: 可选,数组项的类型,常见的类型包括 stringnumberboolean
{
  type: 'array',
  values: [1, 2, 3]
}

object

  • type:必须是对象类型
{
  type: 'object'
}

自定义校验规则

我们可以把一些业务常用的规则,注册到 Validator 实例中,这样可以避免同一个规则配置重复出现在多个地方,提高代码的可维护性。


import {
  Validator,
  checkString,
  checkInteger,
} from '@yorkjs/validator'

const validator = new Validator()

// 添加业务字段
validator.add(
  // 校验规则
  {
    name(rule, value) {

      return checkString(
        {
          required: rule.required,
          empty: rule.empty,
          type: 'string',
          min: 5,
          max: 10,
        },
        value
      )

    },
    age(rule, value) {

    	return checkInteger(
    	  {
    	    required: rule.required,
    	    type: 'integer',
    	    min: 18,
    	    max: 100
    	  },
    	  value
    	)

    }
  },
  // 报错信息
  {
    name: {
      required: '请输入用户名',
      empty: '请输入用户名',
      type: '用户名类型错误',
      min: '用户名请不要少于 5 个字',
      max: '用户名请不要超过 10 个字'
    },
    age: {
      required: '请输入年龄',
      type: '年龄类型错误',
      min: '年龄最小为 18 岁',
      max: '年龄最大为 100 岁'
    }
  }
)

// 使用场景
const errors = validator.validate(
  // 表单数据
  {
    nickname: 'this is a long name',
    age: 101
  },
  // 指定 nickname 对应的校验规则为 name
  {
    nickname: 'name',
    age: 'age'
  }
)

兼容性

全平台适用,但需要确认以下函数是否存在:

Array.isArray

如不存在,请自行打补丁。

Keywords

FAQs

Package last updated on 14 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts