validate.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /**
  2. 数据验证(表单验证)
  3. */
  4. module.exports = {
  5. error: '',
  6. check: function(data, rule) {
  7. for (var i = 0; i < rule.length; i++) {
  8. if (!rule[i].checkType) {
  9. return true;
  10. }
  11. if (!rule[i].name) {
  12. return true;
  13. }
  14. if (!rule[i].errorMsg) {
  15. return true;
  16. }
  17. if (!data[rule[i].name]) {
  18. this.error = rule[i].errorMsg;
  19. return false;
  20. }
  21. switch (rule[i].checkType) {
  22. case 'custom':
  23. if (typeof rule[i].validate == 'function') {
  24. if (!rule[i].validate(data[rule[i].name])) {
  25. this.error = rule[i].errorMsg;
  26. return false;
  27. }
  28. }
  29. break;
  30. case 'required':
  31. var reg = new RegExp('/[\S]+/');
  32. if (reg.test(data[rule[i].name])) {
  33. this.error = rule[i].errorMsg;
  34. return false;
  35. }
  36. break;
  37. case 'string':
  38. var reg = new RegExp('^.{' + rule[i].checkRule + '}$');
  39. if (!reg.test(data[rule[i].name])) {
  40. this.error = rule[i].errorMsg;
  41. return false;
  42. }
  43. break;
  44. case 'int':
  45. var reg = new RegExp('^(-[1-9]|[1-9])[0-9]{' + rule[i].checkRule + '}$');
  46. if (!reg.test(data[rule[i].name])) {
  47. this.error = rule[i].errorMsg;
  48. return false;
  49. }
  50. break;
  51. case 'between':
  52. if (!this.isNumber(data[rule[i].name])) {
  53. this.error = rule[i].errorMsg;
  54. return false;
  55. }
  56. var minMax = rule[i].checkRule.split(',');
  57. minMax[0] = Number(minMax[0]);
  58. minMax[1] = Number(minMax[1]);
  59. if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
  60. this.error = rule[i].errorMsg;
  61. return false;
  62. }
  63. break;
  64. case 'betweenD':
  65. var reg = /^-?[1-9][0-9]?$/;
  66. if (!reg.test(data[rule[i].name])) {
  67. this.error = rule[i].errorMsg;
  68. return false;
  69. }
  70. var minMax = rule[i].checkRule.split(',');
  71. minMax[0] = Number(minMax[0]);
  72. minMax[1] = Number(minMax[1]);
  73. if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
  74. this.error = rule[i].errorMsg;
  75. return false;
  76. }
  77. break;
  78. case 'betweenF':
  79. var reg = /^-?[0-9][0-9]?.+[0-9]+$/;
  80. if (!reg.test(data[rule[i].name])) {
  81. this.error = rule[i].errorMsg;
  82. return false;
  83. }
  84. var minMax = rule[i].checkRule.split(',');
  85. minMax[0] = Number(minMax[0]);
  86. minMax[1] = Number(minMax[1]);
  87. if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
  88. this.error = rule[i].errorMsg;
  89. return false;
  90. }
  91. break;
  92. case 'same':
  93. if (data[rule[i].name] != rule[i].checkRule) {
  94. this.error = rule[i].errorMsg;
  95. return false;
  96. }
  97. break;
  98. case 'notsame':
  99. if (data[rule[i].name] == rule[i].checkRule) {
  100. this.error = rule[i].errorMsg;
  101. return false;
  102. }
  103. break;
  104. case 'email':
  105. var reg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
  106. if (!reg.test(data[rule[i].name])) {
  107. this.error = rule[i].errorMsg;
  108. return false;
  109. }
  110. break;
  111. case 'phoneno':
  112. var reg = /^\d{11}$/;
  113. if (!reg.test(data[rule[i].name])) {
  114. this.error = rule[i].errorMsg;
  115. return false;
  116. }
  117. break;
  118. case 'zipcode':
  119. var reg = /^[0-9]{6}$/;
  120. if (!reg.test(data[rule[i].name])) {
  121. this.error = rule[i].errorMsg;
  122. return false;
  123. }
  124. break;
  125. case 'reg':
  126. var reg = new RegExp(rule[i].checkRule);
  127. if (!reg.test(data[rule[i].name])) {
  128. this.error = rule[i].errorMsg;
  129. return false;
  130. }
  131. break;
  132. case 'in':
  133. if (rule[i].checkRule.indexOf(data[rule[i].name]) == -1) {
  134. this.error = rule[i].errorMsg;
  135. return false;
  136. }
  137. break;
  138. case 'notnull':
  139. if (data[rule[i].name] == 0 || data[rule[i].name] == undefined || data[rule[i].name] ==
  140. null || data[rule[i].name]
  141. .length < 1) {
  142. this.error = rule[i].errorMsg;
  143. return false;
  144. }
  145. break;
  146. case 'lengthMin':
  147. if (data[rule[i].name].length < rule[i].checkRule) {
  148. this.error = rule[i].errorMsg;
  149. return false;
  150. }
  151. break;
  152. case 'lengthMax':
  153. if (data[rule[i].name].length > rule[i].checkRule) {
  154. this.error = rule[i].errorMsg;
  155. return false;
  156. }
  157. break;
  158. case 'numberId':
  159. var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  160. if (!pattern.test(data[rule[i].name])) {
  161. this.error = rule[i].errorMsg;
  162. return false
  163. }
  164. break;
  165. }
  166. }
  167. return true;
  168. },
  169. isNumber: function(checkVal) {
  170. var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
  171. return reg.test(checkVal);
  172. }
  173. }