Skip to content

yorkjs/validator

Repository files navigation

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

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published