- 文档地址
- 可以简单使用默认也可以自定义通过进行校验,非常适用于验证中心
- 新增管道形式,适用于多重校验
- 提供异步校验能力
- 新增新增流程式校验能力,依然支持同步异步
- html中则直接引入common文件夹下的vdt.js,window.vdt进行调用
import vdt from 'jj-vdt'
// 扩展流程式校验
import { vdt, vdtX} from 'jj-vdt'
<script src="jj-vdt/common/vdt.js"></script>
// 先注入校验配置
const Vdt = vdt({
// key指代校验模式,通过Vdt.test(val)采用相应模式校验
test:{
msg: "该值不能为空",
default: "empty"
},
testA:{
msg: "请输入***",
default: "empty"
}
})
console.log(Vdt.test(""))
// {
// res:false,
// msg:"该值不能为空"
// }
console.log(Vdt.testA(""))
// {
// res:false,
// msg:"请输入***"
// }
console.log(Vdt.test("1"))
// {
// res:true,
// }
const Vdt = vdt({
qq:[{
msg: "请输入qq号",
default: "empty"
},{
msg: "qq号输入错误",
default: "qq"
}]
})
console.log(Vdt.qq(""))
// {
// res:false,
// msg:"请输入qq号"
// }
console.log(Vdt.qq("12"))
// {
// res:false,
// msg:"qq号输入错误"
// }
console.log(Vdt.qq("12345"))
// {
// res:true
// }
自定义需要注入fn函数,参数即需要校验的值,函数需要返回true/false,来返回校验结果
const Vdt = vdt({
test:[{
msg: "请输入内容",
default: "empty"
},{
msg: "只能输入3个字",
fn: (val)=>{
return val.length===3 ? true : false;
}
}]
})
console.log(Vdt.test(""))
// {
// res:false,
// msg:"请输入内容"
// }
console.log(Vdt.test("12"))
// {
// res:false,
// msg:"只能输入3个字"
// }
console.log(Vdt.test("123"))
// {
// res:true,
// }
自定义需要注入返回promise对象的fn函数,参数即需要校验的值,resolve的值需要为true/false
const Vdt = vdt({
test:[{
msg: "请输入内容",
default: "empty"
},{
msg: "只能输入3个字",
asyncFn: (val)=>{
return new Promise(resolve => {
resolve(val.length===3 ? true : false;)
})
}
}]
})
console.log( Vdt.test("").then(res => console.log(res)) )
// {
// res:false,
// msg:"请输入内容"
// }
console.log(Vdt.test("12").then(res => console.log(res)) )
// {
// res:false,
// msg:"只能输入3个字"
// }
console.log(Vdt.test("123").then(res => console.log(res)) )
// {
// res:true,
// }
- empty: 校验空值
- qq: 校验qq
- ip: 校验ip
- port: 校验端口
- mail: 校验mail
import { vdtInitDefault } from "jj-vdt"
vdtInitDefault({
test: val => true
});
const testVdt = vdt({
new: [
{
msg: "test错误",
default: "test"
}
]
});
一般我们我们表单校验会校验多个值,所以增加了vdtX流程方法,请不要使用数字作为key值,因为会导致对象无序遍历。
import { vdt, vdtX } from "jj-vdt"
// 初始化配置
const testVdt = vdt({
account: [
{
msg: "账号不能为空",
default: "empty"
}
],
password: [
{
msg: "密码不能为空",
default: "empty"
}
]
});
// 初始化流程校验
vdtX.init(testVdt);
// 进行流程校验
vdtX.run({
account: "",
password: ""
})
// {
// res:false,
// msg:"账号不能为空"
// }
vdtX.run({
account: "admin",
password: ""
})
// {
// res:false,
// msg:"密码不能为空"
// }
当流程涉及校验的key,存在使用异步方法进行校验时,请使用runAsync
const testVdt = vdt({
account: [
{
msg: "账号不能为空",
default: "empty"
},
{
msg: "自定错误",
asyncFn: (val: any) => {
return new Promise(resolve => {
const res = val ? false : true;
resolve(res);
});
}
}
],
password: [
{
msg: "密码不能为空",
default: "empty"
}
]
});
vdtX.init(testVdt);
vdtX.runAsync({
account: "",
password: ""
}).then(res => {
console.log(res)
})
// {
// res:false,
// msg:"账号不能为空"
// }
vdtX中依然支持使用自定义的校验方法
const testVdt = vdt({
qq: [
{
msg: "qq不能为空",
default: "empty"
}
],
mail: [
{
msg: "邮箱不能为空",
default: "empty"
}
]
});
vdtX.init(testVdt);
// 同步
vdtX.run({
qq: "12",
mail: {
msg: "这里信息自定义",
fn: () => {
return false
}
}
})
// 异步1
vdtX.runAsync({
qq: "12",
mail: {
msg: "这里信息自定义",
asyncFn: () => {
return new Promise(resolve=>{
resolve(false)
});
}
}
}).then(res => {
console.log(res)
})
// 异步2
vdtX.runAsync({
qq: "12",
mail: {
msg: "这里信息自定义",
asyncFn: new Promise(resolve=>{
resolve(false)
});
}
}).then(res => {
console.log(res)
})
vdt模块
import {
vdt, vdtX, vdtInitDefault
} from "jj-vdt"
// 注入初始校验方式
vdtInitDefault({
// 长度在4-16之间,包含4和16
length_4_16: val => val && val.length <= 16 && val.length >= 4,
imgCode_length: val => val && val.trim().length !== 4
})
// 注入初始校验对象
export const Vdt = vdt({
account: [{
msg: "请输入账号",
default: "empty"
}, {
msg: "账号输入错误",
default: "length_4_16"
}],
password: [{
msg: "请输入密码",
default: "empty"
}, {
msg: "密码输入错误",
default: "length_4_16"
}],
imgCode: [{
msg: "请输入验证码",
default: "empty"
}, {
msg: "图形验证码错误",
default: "imgCode_length"
}]
})
vdtX.init(Vdt);
export const VdtX = vdtX;
export default vdtX;
实际使用, 校验账号、密码、图形验证码
import {
VdtX
} from "@/utils/vdt"
const vdtRes = VdtX.run({
account: 'admin',
password: '123456',
imgCode: '1234'
})
if(!vdtRes.res){
return alert(vdtRes.msg)
}