validate.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 =
  113. /^[1](([3][0-9])|([4][5-9])|([5][0-3,5-9])|([6][5,6])|([7][0-8])|([8][0-9])|([9][1,8,9]))[0-9]{8}$/;
  114. if (!reg.test(data[rule[i].name])) {
  115. this.error = rule[i].errorMsg;
  116. return false;
  117. }
  118. break;
  119. case 'zipcode':
  120. var reg = /^[0-9]{6}$/;
  121. if (!reg.test(data[rule[i].name])) {
  122. this.error = rule[i].errorMsg;
  123. return false;
  124. }
  125. break;
  126. case 'reg':
  127. var reg = new RegExp(rule[i].checkRule);
  128. if (!reg.test(data[rule[i].name])) {
  129. this.error = rule[i].errorMsg;
  130. return false;
  131. }
  132. break;
  133. case 'in':
  134. if (rule[i].checkRule.indexOf(data[rule[i].name]) == -1) {
  135. this.error = rule[i].errorMsg;
  136. return false;
  137. }
  138. break;
  139. case 'notnull':
  140. if (data[rule[i].name] == 0 || data[rule[i].name] == undefined || data[rule[i].name] ==
  141. null || data[rule[i].name]
  142. .length < 1) {
  143. this.error = rule[i].errorMsg;
  144. return false;
  145. }
  146. break;
  147. case 'lengthMin':
  148. if (data[rule[i].name].length < rule[i].checkRule) {
  149. this.error = rule[i].errorMsg;
  150. return false;
  151. }
  152. break;
  153. case 'lengthMax':
  154. if (data[rule[i].name].length > rule[i].checkRule) {
  155. this.error = rule[i].errorMsg;
  156. return false;
  157. }
  158. break;
  159. case 'numberId':
  160. var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  161. if (!pattern.test(data[rule[i].name])) {
  162. this.error = rule[i].errorMsg;
  163. return false
  164. }
  165. break;
  166. }
  167. }
  168. return true;
  169. },
  170. isNumber: function(checkVal) {
  171. var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
  172. return reg.test(checkVal);
  173. }
  174. }