mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-25 14:42:47 +00:00
278 lines
5.9 KiB
JavaScript
278 lines
5.9 KiB
JavaScript
/**
|
|
* Valid
|
|
* @return {[type]} [description]
|
|
*/
|
|
var net = require('net');
|
|
|
|
var Valid = {
|
|
/**
|
|
* 长度区域
|
|
* @param {[type]} min [description]
|
|
* @param {[type]} max [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
length: function(value, min, max){
|
|
'use strict';
|
|
min = min | 0;
|
|
var length = ((value || '') + '').length;
|
|
if (length < min) {
|
|
return false;
|
|
}
|
|
if (max && length > max) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
/**
|
|
* 必填
|
|
* @return {[type]} [description]
|
|
*/
|
|
required: function(value){
|
|
'use strict';
|
|
return ((value || '') + '').length > 0;
|
|
},
|
|
/**
|
|
* 自定义正则校验
|
|
* @param {[type]} reg [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
regexp: function(value, reg){
|
|
'use strict';
|
|
return reg.test(value);
|
|
},
|
|
/**
|
|
* 邮箱
|
|
* @return {[type]} [description]
|
|
*/
|
|
email: function(value){
|
|
'use strict';
|
|
var reg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
|
|
return this.regexp(value, reg);
|
|
},
|
|
/**
|
|
* 时间戳
|
|
* @return {[type]} [description]
|
|
*/
|
|
time: function(value){
|
|
'use strict';
|
|
var reg = /^[1-5]\d{12}$/;
|
|
return this.regexp(value, reg);
|
|
},
|
|
/**
|
|
* 中文名
|
|
* @return {[type]} [description]
|
|
*/
|
|
cnname: function(value){
|
|
'use strict';
|
|
var reg = /^[\u4e00-\u9fa5\u3002\u2022]{2,32}$/;
|
|
return this.regexp(value, reg);
|
|
},
|
|
/**
|
|
* 身份证号码
|
|
* @return {[type]} [description]
|
|
*/
|
|
idnumber: function(value){
|
|
'use strict';
|
|
if (/^\d{15}$/.test(value)) {
|
|
return true;
|
|
}
|
|
if ((/^\d{17}[0-9xX]$/).test(value)) {
|
|
var vs = '1,0,x,9,8,7,6,5,4,3,2'.split(','),
|
|
ps = '7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2'.split(','),
|
|
ss = value.toLowerCase().split(''),
|
|
r = 0;
|
|
for (var i = 0; i < 17; i++) {
|
|
r += ps[i] * ss[i];
|
|
}
|
|
var isOk = (vs[r % 11] === ss[17]);
|
|
return isOk;
|
|
}
|
|
return false;
|
|
},
|
|
/**
|
|
* 手机号
|
|
* @return {[type]} [description]
|
|
*/
|
|
mobile: function(value){
|
|
'use strict';
|
|
var reg = /^(13|15|18|14|17)\d{9}$/;
|
|
return this.regexp(value, reg);
|
|
},
|
|
/**
|
|
* 邮编
|
|
* @return {[type]} [description]
|
|
*/
|
|
zipcode: function(value){
|
|
'use strict';
|
|
var reg = /^\d{6}$/;
|
|
return this.regexp(value, reg);
|
|
},
|
|
/**
|
|
* 2次值是否一致
|
|
* @param {[type]} field [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
confirm: function(value, cvalue){
|
|
'use strict';
|
|
return value === cvalue;
|
|
},
|
|
/**
|
|
* url
|
|
* @return {[type]} [description]
|
|
*/
|
|
url: function(value){
|
|
'use strict';
|
|
var reg = /^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/;
|
|
return this.regexp(value, reg);
|
|
},
|
|
/**
|
|
* 整数
|
|
* @param {[type]} o [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
int: function(value){
|
|
'use strict';
|
|
|
|
var val = parseInt(value, 10);
|
|
if (isNaN(val)) {
|
|
return false;
|
|
}
|
|
return (val + '').length === (value + '').length;
|
|
},
|
|
/**
|
|
* 浮点数
|
|
* @return {[type]} [description]
|
|
*/
|
|
float: function(value){
|
|
'use strict';
|
|
return isNumberString(value);
|
|
},
|
|
/**
|
|
* 整数范围
|
|
* @param {[type]} min [description]
|
|
* @param {[type]} max [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
range: function(value, min, max){
|
|
'use strict';
|
|
value = parseInt(value, 10);
|
|
min = min | 0;
|
|
if (isNaN(value) || value < min) {
|
|
return false;
|
|
}
|
|
if (max && value > max) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
/**
|
|
* ip4校验
|
|
* @return {[type]} [description]
|
|
*/
|
|
ip4: function(value){
|
|
'use strict';
|
|
return net.isIPv4(value);
|
|
},
|
|
/**
|
|
* ip6校验
|
|
* @return {[type]} [description]
|
|
*/
|
|
ip6: function(value){
|
|
'use strict';
|
|
return net.isIPv6(value);
|
|
},
|
|
/**
|
|
* ip校验
|
|
* @return {[type]} [description]
|
|
*/
|
|
ip: function(value){
|
|
'use strict';
|
|
return net.isIP(value);
|
|
},
|
|
/**
|
|
* 日期校验
|
|
* @return {[type]} [description]
|
|
*/
|
|
date: function(value){
|
|
'use strict';
|
|
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/;
|
|
return this.regexp(value, reg);
|
|
},
|
|
/**
|
|
* 在一个范围内
|
|
* @param {[type]} value [description]
|
|
* @param {[type]} arr [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
in: function(value, arr){
|
|
'use strict';
|
|
return arr.indexOf(value) > -1;
|
|
}
|
|
};
|
|
/**
|
|
* data格式
|
|
* [{
|
|
* value: xxx,
|
|
* name: '',
|
|
* valid: ['required', 'range'],
|
|
* range_args: [],
|
|
* msg:{
|
|
* required: '',
|
|
* range: ''
|
|
* }
|
|
* },{
|
|
* value: xxx,
|
|
* name: '',
|
|
* valid: ['required', 'range'],
|
|
* range_args: [],
|
|
* msg:{
|
|
* required: '',
|
|
* range: ''
|
|
* }
|
|
* }]
|
|
* @param {[type]} data [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
module.exports = function(data){
|
|
'use strict';
|
|
if (!data) {
|
|
return true;
|
|
}
|
|
if (!isArray(data)) {
|
|
data = [data];
|
|
}
|
|
var result = {};
|
|
data.forEach(function(item){
|
|
var valid = item.valid;
|
|
if (!isArray(valid)) {
|
|
valid = [valid];
|
|
}
|
|
valid.some(function(validItem){
|
|
var flag = true;
|
|
//自定义检测方法
|
|
if (isFunction(validItem)) {
|
|
flag = validItem(item.value, item);
|
|
if (isString(flag)) {
|
|
result[item.name] = flag;
|
|
flag = false;
|
|
}
|
|
}else if(!isFunction(Valid[validItem])){
|
|
throw new Error(validItem + ' is not valid');
|
|
}else{
|
|
var args = item[validItem + '_args'] || [];
|
|
if (!isArray(args)) {
|
|
args = [args];
|
|
}
|
|
args = [item.value].concat(args);
|
|
flag = Valid[validItem].apply(Valid, args);
|
|
if (flag === false) {
|
|
var msg = (isObject(item.msg) ? item.msg[validItem] : item.msg) || '';
|
|
msg = msg.replace('{name}', item.name).replace('{value}', item.value);
|
|
result[item.name] = msg;
|
|
}
|
|
}
|
|
return !flag;
|
|
});
|
|
});
|
|
return result;
|
|
}; |