visop
Version:
A simple CLI for scaffolding visible operation projects.
143 lines (140 loc) • 5.69 kB
JavaScript
var _ = require('lodash');
var validator = require('validator');
var expressValidator = require('express-validator');
/**
* 自定义验证
*/
module.exports = function() {
return expressValidator({
errorFormatter: function(param, message, value) {
return {
name: 'ParamValidateError',
param: param,
message: message,
value: value
};
},
customSanitizers: {
toNumber: function(value) {
var newValue = Number(value);
return newValue;
},
},
customValidators: {
// 验证手机号
isTel: function(value){
// return /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|16[6]|17[7]|18[0|1|2|3|5|6|7|8|9])\d{8}$/.test(value);
return /^[1]\d{10}$/.test(value);
},
isDate: function(value){
// console.log(new Date(value).toString());判断是否是有效的日期。
if(new Date(value).toString() == "Invalid Date"){
return false;
}
return /^\d{4}(-)\d{2}(-)\d{2}$/.test(value);
},
isDateTime: function(value){
// console.log(new Date(value).toString());判断是否是有效的日期。
if(new Date(value).toString() == "Invalid Date"){
return false;
}
return /^\d{4}(-)\d{2}(-)\d{2}( )\d{2}(:)\d{2}(:)\d{2}$/.test(value);
},
isDid: function(value){ return /^\d{1,20}$/.test(value); },
isPassword: function(value){
// return /^[\da-zA-Z]{6,16}$/.test(value);
return /^.{6,16}$/.test(value);
},
isPhone: function(value){ return /^1\d{10}$/.test(value); },
isString: function(value) { return _.isString(value) },
isEmail: function(value) { return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value) },
isNumber: function(value) {
return !_.isNaN(Number(value))
},
isObject: function(value) { return _.isObject(value) },
isArray: function(value) {
var flag = _.isString(value);
if(flag){
return _.isArray(JSON.parse(value))
}else{
return _.isArray(value)
}
},
inArray: function(param) {
var argumentsArray = [].slice.apply(arguments);
var validatorName = argumentsArray[1];
return _.every(param, function(item) {
var validatorOptions = _.tail(argumentsArray);
validatorOptions.unshift(item);
switch (validatorOptions[1]) {
case 'isString':
return _.isString(item);
break;
case 'isEmail':
return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value);
break;
case 'isNumber':
return _.isNumber(item);
break;
case 'isObject':
return _.isObject(item);
break;
case 'isArray':
return _.isArray(item);
break;
case 'isBoolean':
switch (typeof value) {
case 'string':
return value === 'true' || value === 'false';
break;
case 'boolean':
return value === true || value === false;
break;
default:
return false;
}
break;
default:
return validator[validatorName].apply(this, validatorOptions);
}
});
},
isBoolean: function(value) {
switch (typeof value) {
case 'string':
return value === 'true' || value === 'false';
break;
case 'boolean':
return value === true || value === false;
break;
default:
return false;
}
},
custom: function(value, callback) {
if (typeof value !== 'undefined') {
return callback(value);
} else {
return false;
}
},
isObjectIdArray: function(value) {
if (value == null) return true;
if (!_.isArray(value)) return false;
for (var i = 0; i < value.length; i++) {
if (!validator.isMongoId(value[i])) {
return false;
}
}
if (i >= value.length) {
return true;
}
},
isObjectIdArrayStr: function(value) {
return _.every(value, function(v) {
validator.isMongoId(v);
});
},
}
});
};