# validator **Repository Path**: syjefbz/validator ## Basic Information - **Project Name**: validator - **Description**: 简单的规则验证工具,支持自定义验证方法 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-03-16 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README validator === >用来验证数据是否匹配规则的工具,支持自定义比较操作和组操作 示例 --- [codepen validator](http://codepen.io/cqmyg/pen/PpeQoJ) 使用 --- ### 基本使用 ```js import Engine from "../src/impl/Engine"; let baseRule = { and: [ { operator: "greaterThan", key: "age", errorMsg: "年龄必须大于 18", targetValue: 18 }, { operator: "lessThan", key: "age", errorMsg: "年龄必须小于 30", targetValue: 30 }, { or: [ { and: [ { operator: "equal", key: "gender", targetValue: "male" }, { operator: "greaterThan", key: "height", errorMsg: "男性身高必须大于 1.7m", targetValue: 1.7 } ] }, { and: [ { operator: "equal", key: "gender", targetValue: "woman" }, { operator: "greaterThan", key: "height", errorMsg: "女性身高必须大于 1.6m", targetValue: 1.6 } ] } ] } ] }; let ruleName = "base validate", maleData = {age: 25, gender: "male", height: 1.71}, engine = new Engine(); engine.addRule(ruleName, baseRule); engine.run(ruleName, maleData, () => { alert("success!"); }, (error) => { alert("failed"); }); ``` ### 自定义比较符 ```js import Engine from "../src/impl/Engine"; let matchOperator = (currentValue:any, targetValue: any) => { return targetValue.test(currentValue); }; let matchRule = { and: [{ operator: "match", key: "email", targetValue: /^tester.*@gmail.com/ }] }; let ruleName = "test match", validData = {name: "test", age: 18, gender: "male", email: "tester-hello@gmail.com"}, engine = new Engine(); engine.addOperator("match", matchOperator); engine.addRule(ruleName, matchRule); engine.run(ruleName, validData, () => { alert("success!"); }, (error) => { alert("failed"); }); ``` ### 自定义组运算符 ```js import Engine from "../src/impl/Engine"; let twiceExecutor = (children: ExecutorInterface[], target:Object, contextData: Object) => { let result = {status: true}, successCount = 0; for(let i = 0, j = children.length; i < j; ++i) { result = children[i].execute(target, contextData); if (result.status) { successCount++; } } if (successCount === 2) { return {status: true}; } return {status: false}; }; let twiceRule = { twice: [{ operator: "equal", key: "name", targetValue: "test" }, { operator: "lessThan", key: "age", targetValue: 20 }, { operator: "equal", key: "gender", targetValue: "male" }] }; let twiceMatchData = {name: "test", age: 48, gender: "male"}, engine = new Engine(); engine.addGroupExecutor("twice", twiceExecutor); engine.addRule("twice", twiceRule); engine.run(ruleName, twiceMatchData, () => { alert("success!"); }, (error) => { alert("failed"); }); ``` 构建 --- ```shell grunt ``` 测试 --- ```shell npm run test ```