Skip to content

Commit 7ce5654

Browse files
committed
无实例验证
1 parent 806f7e8 commit 7ce5654

1 file changed

Lines changed: 120 additions & 0 deletions

File tree

lib/validate.js

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
'use strict';
2+
3+
Object.defineProperty(exports, "__esModule", {
4+
value: true
5+
});
6+
7+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
8+
9+
var _testHook = require('./testHook');
10+
11+
var _testHook2 = _interopRequireDefault(_testHook);
12+
13+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14+
15+
/**
16+
* 验证核心方法,不依赖对象实例
17+
*/
18+
var validate = _extends({}, _testHook2.default);
19+
20+
/**
21+
* 通过 field 验证
22+
* @param {Object} field 验证信息域
23+
* @return {Object} 包含结果、错误信息
24+
*/
25+
validate.validateByField = function (field) {
26+
var thatField = field;
27+
// 成功标识
28+
var isSuccess = true;
29+
var error = void 0;
30+
31+
var isRequired = thatField.rules.indexOf('required') !== -1;
32+
var isEmpty = thatField.value === undefined || thatField.value === '' || thatField.value === null;
33+
34+
var rules = thatField.rules.split(/\s*\|\s*/g);
35+
36+
var _loop = function _loop(i, ruleLength) {
37+
// 逐条验证,如果已经验证失败,则不需要进入当前条目再次验证
38+
if (!isSuccess) {
39+
return 'break';
40+
}
41+
42+
// 转换如:maxLength(12) => ['maxLength', 12]
43+
var method = rules[i];
44+
var parts = /^(.+?)\((.+)\)$/.exec(method);
45+
var param = '';
46+
47+
// 解析带参数的验证如 max_length(12)
48+
if (parts) {
49+
method = parts[1];
50+
param = parts[2];
51+
}
52+
53+
// 如果不是 required 这个字段,该值是空的,则不验证,继续下一个规则。
54+
if (!isRequired && isEmpty) {
55+
return 'continue';
56+
}
57+
58+
// 匹配验证
59+
if (typeof validate[method] === 'function') {
60+
if (!validate[method].apply(null, [thatField, param])) {
61+
isSuccess = false;
62+
}
63+
}
64+
65+
// 错误信息域
66+
error = {
67+
id: thatField.id,
68+
name: thatField.name,
69+
value: thatField.value,
70+
rule: method
71+
};
72+
73+
// 解析错误信息
74+
if (!isSuccess) {
75+
// 错误提示
76+
error.message = function message() {
77+
var seqText = thatField.messages ? thatField.messages.split(/\s*\|\s*/g)[i] : '';
78+
79+
// 替换 {{value}} 和 {{param}} 为指定值
80+
return seqText ? seqText.replace(/\{\{\s*value\s*}}/g, thatField.value).replace(/\{\{\s*param\s*}}/g, param) : seqText;
81+
}();
82+
}
83+
};
84+
85+
_loop2: for (var i = 0, ruleLength = rules.length; i < ruleLength; i++) {
86+
var _ret = _loop(i, ruleLength);
87+
88+
switch (_ret) {
89+
case 'break':
90+
break _loop2;
91+
92+
case 'continue':
93+
continue;}
94+
}
95+
96+
return {
97+
result: isSuccess,
98+
error: error
99+
};
100+
};
101+
102+
/**
103+
* 通过 fields 验证
104+
* @param {Object} fields 验证信息域集合
105+
* @param {Object} body 数据集合
106+
* @return {Object} results 结果列表
107+
*/
108+
validate.validateByFields = function (fields, body) {
109+
var results = null;
110+
for (var name in fields) {
111+
var field = fields[name];
112+
field.name = name;
113+
field.value = body[name];
114+
results[name] = validate.validateByField(field);
115+
}
116+
return results;
117+
};
118+
119+
exports.default = validate;
120+
module.exports = exports['default'];

0 commit comments

Comments
 (0)