vdjs

A simple JavaScript data validation library.

Usage no npm install needed!

<script type="module">
  import vdjs from 'https://cdn.skypack.dev/vdjs';
</script>

README

vdjs

A JavaScript data validation library.

usage

npm i vdjs
const vdjs = require('vdjs')

vdjs.validate(data, rules).then(res => {
  if (res.fails()) alert(res.message)
})

API

  • vdjs.validate(data, rules) 返回 Promise<analyzerResult>

analyzerResult:

type analyzerResult = {
  valid: { [key: string]: validRuleResult },
  fails: () => boolean,
  message: (isAll?: boolean) => string | string[]
}

rules

列出需要验证的 ruleType,信息可以是 message 或者 msg

{
  key: { required: true, msg: 'Required `:attr`' },
  key2: [
    { required: true, msg: 'Required `:attr`' },
    { length: 10, msg: '`:attr` must be :ruleValue' },
  ],
  key2: { required: true, length: [6, 10], msg: 'Invalid parameters' },
}

ruleType

支持的规则如下:

type ruleReturn = boolean | Promise<boolean>
type ruleValidator = (value: any) => ruleReturn
type variableType = 'string' | 'object' | 'array' | 'boolean' | 'number' | 'null' | 'undefined' | 'symbol' | 'NaN'

export interface ruleType {
  [key: string]: any;
  message?: string;
  msg?: string;

  /**
   * 必须的,非 undefined 则返回 true
   * **/
  required?: (value: any, ruleValue: boolean) => ruleReturn;

  /**
   * 自定义验证
   * **/
  validator?: (value: any, ruleValue: ruleValidator) => ruleReturn;

  /**
   * 等于 ===
   * **/
  eq?: (value: any, ruleValue: any) => ruleReturn;

  /**
   * 不等于 !==
   * **/
  not?: (value: any, ruleValue: any) => ruleReturn;

  /**
   * 类型判断
   * **/
  type?: (value: any, ruleValue: variableType) => ruleReturn;

  /**
   * 数值最小值,>=
   * **/
  min?: (value: any, ruleValue: number) => ruleReturn;

  /**
   * 数值最大值,<=
   * **/
  max?: (value: any, ruleValue: number) => ruleReturn;

  /**
   * 比较 >
   * **/
  gt?: (value: any, ruleValue: any) => ruleReturn;

  /**
   * 比较 >=
   * **/
  gte?: (value: any, ruleValue: any) => ruleReturn;

  /**
   * 比较 <
   * **/
  lt?: (value: any, ruleValue: any) => ruleReturn;

  /**
   * 比较 <=
   * **/
  lte?: (value: any, ruleValue: any) => ruleReturn;

  /**
   * 长度
   * **/
  length?: (value: any, ruleType: number | [number, number]) => ruleReturn;

  /**
   * 在范围之内
   * **/
  between?: (value: any, ruleValue: [any, any]) => ruleReturn;

  /**
   * 不在范围之内
   * **/
  notBetween?: (value: any, ruleValue: [any, any]) => ruleReturn;

  /**
   * 在里面,支持数组,字符,对象
   * **/
  in?: (value: any, ruleValue: any[] | string | object) => ruleReturn;

  /**
   * 不在里面,支持数组,字符,对象
   * **/
  notIn?: (value: any, ruleValue: any) => ruleReturn;

  /**
   * 符合正则
   * **/
  math?: (value: any, ruleValue: RegExp) => ruleReturn;

  /**
   * 不符合正则
   * **/
  notMath?: (value: any, ruleValue: RegExp) => ruleReturn;

  /**
   * 相似
   * **/
  like?: (value: any, ruleValue: string) => ruleReturn;

  /**
   * 非相似
   * **/
  notLike?: (value: any, ruleValue: string) => ruleReturn;

  /**
   * 匹配邮箱
   * **/
  email?: (value: any, ruleValue: RegExp | boolean) => ruleReturn;

  /**
   * true 时验证空,false时验证非空;'', null, undefined, [], {}, NaN
   * **/
  empty?: (value: any, ruleValue: boolean) => ruleReturn;
}