forked from kaelzhang/neuron.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrule.js
More file actions
127 lines (101 loc) · 2.44 KB
/
rule.js
File metadata and controls
127 lines (101 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/**
* @name Rule
*/
var Rule = new function () {
var rules = {};
function getPreset(rule) {
var test = rule.test,
name = test.split(':')[0],
arg = test.split(':')[1] || '',
hint = rule.hint || null,
preset = rules[name];
if (!preset) {
throw "Rule preset " + name + " does not exist";
}
return {
name: rule.name || name,
test: function (v) {
return preset(v, arg);
},
hint: hint && NR.sub(hint, [arg])
}
}
// 添加rule对象
this.add = function (name, rule) {
rules[name] = rule
};
// 获取rule对象,先不做任何预设
// @example gain('required',['field required'])
// @param param {Array}
this.produce = function (rule) {
if (typeof rule == "string") {
rule = { test: rule };
}
if (typeof rule.test == "string") {
rule = getPreset(rule);
}
// now we have such fomats:
//
// {
// test:function(v){},
// hint:""
// }
return {
name: rule.name || 'dp_rule_' + NR.guid(),
test: rule.test,
hint: rule.hint
}
};
}
// 预置规则
// 必填
Rule.add('required', function (v) {
return !!v && (v.trim ? v.trim() != '' : true);
});
Rule.add('notempty', function (v) {
return !!v.length && v.length > 0;
});
Rule.add('equal', function (v, v2) {
return v == v2;
});
Rule.add('unequal', function (v, v2) {
return v != v2;
});
// 最大
Rule.add('max', function (v, l) {
return v.length <= l;
});
// 最小
Rule.add('min', function (v, l) {
return v.length >= l;
});
Rule.add('in', function (v, str) {
var ret = true;
var vs = str.split(',');
for (var i = 0, l = vs.length; i < l; i++) {
if (vs[i] == v) {
return true;
}
}
return false;
});
// remote验证
/*
Rule.add('_remote', {
// 这个cb让Remote想办法处理了丢过来
test: function (v, cb) {
return cb.call(this, v);
}
});
*/
// 正则规则们
[['chinese', /^[\u0391-\uFFE5]+$/],
['email', /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/],
['nickname', /^[0-9a-zA-Z_\u4e00-\u9fa5]+$/],
['numeric',/^\d+(\.\d+)?$/]
].forEach(function (e) {
Rule.add(e[0], function (v) {
return e[1].test(v);
});
});
module.exports = Rule;