graceChecker.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. 数据验证(表单验证)
  3. 来自 grace.hcoder.net
  4. 作者 hcoder 深海
  5. */
  6. module.exports = {
  7. error:'',
  8. check : function (data, rule){
  9. for(var i = 0; i < rule.length; i++){
  10. if (!rule[i].checkType){return true;}
  11. if (!rule[i].name) {return true;}
  12. if (!rule[i].errorMsg) {return true;}
  13. let value = data
  14. rule[i].name.split('.').forEach((key)=>{
  15. value = value[key]
  16. })
  17. if (!value) {this.error = rule[i].errorMsg; return false;}
  18. switch (rule[i].checkType){
  19. case 'string':
  20. var reg = new RegExp('^.{' + rule[i].checkRule + '}$');
  21. if(!reg.test(value)) {this.error = rule[i].errorMsg; return false;}
  22. break;
  23. case 'int':
  24. var reg = new RegExp('^(-[1-9]|[1-9])[0-9]{' + rule[i].checkRule + '}$');
  25. if(!reg.test(value)) {this.error = rule[i].errorMsg; return false;}
  26. break;
  27. break;
  28. case 'between':
  29. if (!this.isNumber(value)){
  30. this.error = rule[i].errorMsg;
  31. return false;
  32. }
  33. var minMax = rule[i].checkRule.split(',');
  34. minMax[0] = Number(minMax[0]);
  35. minMax[1] = Number(minMax[1]);
  36. if (value > minMax[1] || value < minMax[0]) {
  37. this.error = rule[i].errorMsg;
  38. return false;
  39. }
  40. break;
  41. case 'betweenD':
  42. var reg = /^-?[1-9][0-9]?$/;
  43. if (!reg.test(value)) { this.error = rule[i].errorMsg; return false; }
  44. var minMax = rule[i].checkRule.split(',');
  45. minMax[0] = Number(minMax[0]);
  46. minMax[1] = Number(minMax[1]);
  47. if (value > minMax[1] || value < minMax[0]) {
  48. this.error = rule[i].errorMsg;
  49. return false;
  50. }
  51. break;
  52. case 'betweenF':
  53. var reg = /^-?[0-9][0-9]?.+[0-9]+$/;
  54. if (!reg.test(value)){this.error = rule[i].errorMsg; return false;}
  55. var minMax = rule[i].checkRule.split(',');
  56. minMax[0] = Number(minMax[0]);
  57. minMax[1] = Number(minMax[1]);
  58. if (value > minMax[1] || value < minMax[0]) {
  59. this.error = rule[i].errorMsg;
  60. return false;
  61. }
  62. break;
  63. case 'same':
  64. if (value != rule[i].checkRule) { this.error = rule[i].errorMsg; return false;}
  65. break;
  66. case 'notsame':
  67. if (value == rule[i].checkRule) { this.error = rule[i].errorMsg; return false; }
  68. break;
  69. case 'isEmail':
  70. var reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
  71. if (!reg.test(value)) { this.error = rule[i].errorMsg || rule[i].name + '不是合法的邮箱格式!'; return false; }
  72. break;
  73. case 'isMobile':
  74. var reg = /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(18[0-9]{1})|(17[0-9]{1})|(19[0-9]{1}))+\d{8})$/;
  75. if (!reg.test(value)) { this.error = rule[i].errorMsg || rule[i].name + '不是合法的手机号码!'; return false; }
  76. break;
  77. case 'isMobileNumber':
  78. var reg = /^[0-9]{11}$/;
  79. if (!reg.test(value)) { this.error = rule[i].errorMsg || rule[i].name + '不是合法的手机号码!'; return false; }
  80. break;
  81. case 'isUrl':
  82. var reg = /^http[s]?:\/\/.*/
  83. if (!reg.test(value)) { this.error = rule[i].errorMsg|| rule[i].name + '不是合法的URL!'; return false; }
  84. break;
  85. case 'zipcode':
  86. var reg = /^[0-9]{6}$/;
  87. if (!reg.test(value)) { this.error = rule[i].errorMsg; return false; }
  88. break;
  89. case 'reg':
  90. var reg = new RegExp(rule[i].checkRule);
  91. if (!reg.test(value)) { this.error = rule[i].errorMsg; return false; }
  92. break;
  93. case 'in':
  94. if(rule[i].checkRule.indexOf(value) == -1){
  95. this.error = rule[i].errorMsg; return false;
  96. }
  97. break;
  98. case 'notnull':
  99. if(value == null || value.length < 1){this.error = rule[i].errorMsg; return false;}
  100. break;
  101. }
  102. }
  103. return true;
  104. },
  105. checkFormData : function (data){
  106. for(i=0; i<data.length; i++){
  107. let item = data[i]
  108. let name = item.name
  109. let value = item.value
  110. if(!(item.readable && item.writable)){
  111. continue
  112. }
  113. if(item.options.required){
  114. if(value == null || value.length < 1){
  115. return name+": "+ (item.options.requiredMessage || '必填项不能为空!')
  116. }
  117. }
  118. if(item.options.dataType && item.options.dataTypeCheck){
  119. switch (item.options.dataType ){
  120. case 'number':
  121. var reg = /^-?[0-9]+(\.\d+)?$/
  122. if (!reg.test(value)) {
  123. return name+": "+ item.options.dataTypeMessage
  124. }
  125. break;
  126. case 'integer':
  127. if (!(/^0$/.test(value) || /^(-[1-9]|[1-9])[0-9]*$/.test(value))) {
  128. return name+": "+ item.options.dataTypeMessage
  129. }
  130. break;
  131. case 'float':
  132. if (!(/^\d+(\.\d+)?$/.test(value) || /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/)) {
  133. return name+": "+ item.options.dataTypeMessage
  134. }
  135. break;
  136. case 'url':
  137. var reg = /^http[s]?:\/\/.*/
  138. if (!reg.test(value)) {
  139. return name+": "+ item.options.dataTypeMessage
  140. }
  141. break;
  142. case 'email':
  143. var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/
  144. if (!reg.test(value)) {
  145. return name+": "+ item.options.dataTypeMessage
  146. }
  147. break;
  148. case 'hex':
  149. var reg = /^[0-9a-fA-F]{1,3}$/
  150. if (!reg.test(value)) {
  151. return name+": "+ item.options.dataTypeMessage
  152. }
  153. break;
  154. }
  155. };
  156. if(item.options.pattern && item.options.patternMessage && item.options.patternCheck){
  157. var reg = new RegExp(item.options.pattern)
  158. if (!reg.test(value)) {
  159. return name+": "+ item.options.patternMessage
  160. }
  161. }
  162. }
  163. return ''
  164. },
  165. isNumber : function (checkVal){
  166. var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
  167. return reg.test(checkVal);
  168. }
  169. }