2.2.5 • Published 2 years ago

@anfo/validator v2.2.5

Weekly downloads
1
License
MIT
Repository
github
Last release
2 years ago

验证变量 Validation variable NPM | Github

特性

  • 递归验证规律的变量 Recursively verify the variables of the law
  • 语法简单 Simple syntax
  • 支持异步操作 Support asynchronous operation

Usage

npm install @anfo/validator

Basic

const Validator = require('@anfo/validator')
// import Validator from '@anfo/validator'

const validator = new Validator({
    // 指定一些具名测试函数 Specify some named test functions
    mobile(val){
        return /^1[3456789]\d{9}$/.test(val) 
    }
})

;(async ()=>{
    const valid = await validator.validate('15600001111', 'mobile')
    // 等同于
    // const valid = await validator.v('15600001111', 'mobile')
    // true
})()

默认的测试函数 Default Test Functions

  • truthy - 真值
  • falsy - 假值
  • object - 对象
  • number - 数值
  • string - 字符串
  • truthyString - 非空字符串
  • boolean - 布尔值
  • null - null/undefined
  • completeNull - null
  • completeUndefined - undefined
  • function - function
  • array - array
  • any - 任何类型
module.exports = {
    truthy(val){
        return !!val
    },
    truthyString(val){
        return !!val && typeof val === 'string'
    },
    falsy(val){
        return !val
    },
    object(val){
        return val && typeof val === 'object'
    },
    number(val){
        return typeof val === 'number'
    },
    string(val){
        return typeof val === 'string'
    },
    boolean(val){
        return typeof val === 'boolean'
    },
    null(val){
        return val == null
    },
    completeNull(val){
        return val === null
    },
    completeUndefined(val){
        return val === undefined
    },
    function(val){
        return typeof val === 'function'
    },
    array(val){
        return val instanceof Array
    },
    any(){
        return true
    }
}

规则的写法

一条规则可以是字符串,正则表达式,数组,对象或者自定义函数

使用字符串

调用默认/自定义的测试函数
validator.v('12', 'number')
逻辑与/或的字符串写法
assert(!await validator.v([1, 2], 'object && number'))
assert(await validator.v([1, 2], 'object && array'))
assert(!await validator.v([1, 2], 'string || number'))
assert(await validator.v([1, 2], 'object || number'))
简单表达式(判断相等/表达式)
// >
assert(await validator.validate(12, '>10'))  
// >=
assert(await validator.validate(12, '>=12'))
// <=
assert(await validator.validate(12, '<=12'))

// =
// 验证字符串,数值会返回false
assert(!await validator.validate(12, '=12'))
assert(await validator.validate('12', '=12'))
assert(await validator.validate('abcdefg', '=abcdefg'))
assert(await validator.validate(' abc defg', '= abc defg'))
assert(!await validator.validate(' abc defg', '= abc defg '))
// 如果要判断类型,则需要使用 && 来进行指定
assert(!await validator.validate(12, 'string && =12'))
assert(await validator.validate(12, 'number && =12'))
// && 优先于 || 
// 假如||优先,那么这里就是false,假如&&优先,那么这里就是true
assert(await newValidator.validate(true, 'true || false && false'))

使用boolean表达boolean常数

assert(!await validator.validate(true, false))
assert(await validator.validate(true, true))

使用number表示number常数

assert(!await validator.validate(12, 13))
assert(await validator.validate(12, 12))
assert(!await validator.validate(NaN, 12))
assert(await validator.validate(NaN, NaN))

使用数组表示逻辑与

validator.v('12', ['string', /1/, /2/])

使用对象

validator.v({
    a: '12',
    b: 12,
    c: null
}, {
    b: 'number',
    a: 'string',
    c: null
})
使用$
validator.v({
    a: '123124124',
    b: 1241231,
    c: null
}, {
    // key后加$ 表示可以不存在,否则必须存在
    a$: 'string',
    b: 'number',
    // 字符规则后加$表示可以为null/undefined
    c: 'number$',
    // $表示被验证的对象本身
    $: 'object',
    // $subItem 表示当前验证被验证对象/数组下的所有值,表示...obj或...array
    $subItem: 'truthy',
    // $or 表示一条规则,表示验证对象需要至少符合数组内的任一项
    $or: ['string' , 'object'],
})
使用$来描述复杂的require关系
validator.v({
    a: '123124124',
    b: 1241231,
    c: null
}, {
    //当a存在是 c必须存在,a不存在时,c也可以不存在
    a$: 'string',
    b: 'number',
    c$: 'null',
    $(val){
        if(val.a){
            return val.c !== undefined
        }else{
            return true
        }
    }
}
使用字符串[]来描述数组中的类型
/*
array[number]规则表示{
    $: 'array',
    $subItem: 'number'
} 的语法糖
*/
validator.v([12, 13, 12343], 'array[number]')

递归验证的例子

validator.addPresetRule('person', {
    name: 'truthyString',
    age: 'number',
    children$: 'array[person]$'
})
validator.addPresetRule('people', 'array[person]')
const data = [{
    name: '龙一',
    age: 55,
    children: [{
        name: '龙二',
        age: 32
    }]
}, {
    name: '落一',
    age: 45,
    children: [{
        name: '落二',
        age: 12
    }]
}]
validator.v(data, 'people')

转义$

validator.v({
    a$: 1,
}, {
    a$$: 'number',
})// Promise.resolve(true)

await validator.v({
    $: 1,
}, {
    $$: 'number',
})// Promise.resolve(true)

!await validator.v({
    $subItem: 1,
}, {
    $$subItem: 'string',
})// Promise.resolve(false)
2.2.3

2 years ago

2.2.5

2 years ago

2.2.4

2 years ago

2.2.2

3 years ago

2.2.1

3 years ago

2.2.0

4 years ago

2.1.0

4 years ago

2.0.6

4 years ago

2.0.3

4 years ago

2.0.2

4 years ago

2.0.5

4 years ago

2.0.4

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.2.0

4 years ago

1.2.1

4 years ago

1.1.0

4 years ago

1.0.0

4 years ago