validator.js 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /* eslint-disable */
  2. const validatorUtil = require('./validatorUtil');
  3. const responseFormat = require('./responseFormat');
  4. module.exports = {
  5. validate (value, rules) {
  6. let conclusion = {
  7. success: true,
  8. message: ""
  9. },
  10. success = true,
  11. rule;
  12. if(!rules || rules.length == 0){
  13. return conclusion;
  14. }
  15. for(let i = 0, len = rules.length; i < len; i++){
  16. rule = rules[i];
  17. switch (rule.type){
  18. case 'is':
  19. success = rule.reg.test(value);//个性化的正则表达式校验
  20. break;
  21. case 'isRequired':
  22. success = !!validatorUtil.toString(value);
  23. break;
  24. case 'isFilled':
  25. success = !!validatorUtil.toString(value).trim();
  26. break;
  27. case 'isEmail':
  28. success = validatorUtil.isEmail(value);
  29. break;
  30. case 'isMobilePhone':
  31. success = validatorUtil.isMobilePhone(value, 'zh-CN');
  32. break;
  33. case 'isURL':
  34. success = validatorUtil.isURL(value);
  35. break;
  36. case 'isNumber':
  37. success = validatorUtil.isInt(value, rule); //同int
  38. break;
  39. case 'isId':
  40. success = validatorUtil.isId(value); //isInt 的首位不能为0, isID可以
  41. break;
  42. case 'isInt':
  43. success = validatorUtil.isInt(value, rule);
  44. break;
  45. case 'isFloat':
  46. success = validatorUtil.isFloat(value, rule);
  47. break;
  48. case 'isSoftDecimal2':
  49. success = validatorUtil.isSoftDecimal2(value, rule.min, rule.max);
  50. break;
  51. case 'isLength':
  52. success = validatorUtil.isLength(value, rule.min, rule.max);
  53. break;
  54. default:
  55. if(!rule.method){
  56. conclusion = {
  57. success: false,
  58. message: "找不到此规则的校验方法"
  59. }
  60. }else {
  61. success = rule.method(val); //个性化函数,校验特定的变量+特定规则
  62. }
  63. break;
  64. }
  65. if(!success || !conclusion.success){
  66. conclusion.message = rule.message || conclusion.message;
  67. conclusion.success = false;
  68. break; // 有错误则跳出
  69. }
  70. }
  71. return conclusion;
  72. },
  73. /**
  74. * 校验参数字段是否完整,验证数据完整性
  75. *
  76. * @param {Object} params post请求参数对象
  77. * @param {Array} rules 校验字段对象
  78. * @param {Object} ctx 请求对象
  79. * @return {void}
  80. */
  81. validateParamsField (params, rules, ctx) {
  82. for (let key of Object.keys(params)) {
  83. let conslution = this.validate(params[key], rules[key]);
  84. if (!conslution.success) {
  85. ctx.body = responseFormat.responseFormat(200, conslution.message, false);
  86. return;
  87. }
  88. }
  89. }
  90. }