graceChecker.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  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 = /^1[0-9]{10,10}$/;
  75. if (!reg.test(value)) { this.error = rule[i].errorMsg || rule[i].name + '不是合法的手机号码!'; return false; }
  76. break;
  77. case 'isUrl':
  78. var reg = /^http[s]?:\/\/.*/
  79. if (!reg.test(value)) { this.error = rule[i].errorMsg|| rule[i].name + '不是合法的URL!'; return false; }
  80. break;
  81. case 'zipcode':
  82. var reg = /^[0-9]{6}$/;
  83. if (!reg.test(value)) { this.error = rule[i].errorMsg; return false; }
  84. break;
  85. case 'reg':
  86. var reg = new RegExp(rule[i].checkRule);
  87. if (!reg.test(value)) { this.error = rule[i].errorMsg; return false; }
  88. break;
  89. case 'in':
  90. if(rule[i].checkRule.indexOf(value) == -1){
  91. this.error = rule[i].errorMsg; return false;
  92. }
  93. break;
  94. case 'notnull':
  95. if(value == null || value.length < 1){this.error = rule[i].errorMsg; return false;}
  96. break;
  97. }
  98. }
  99. return true;
  100. },
  101. checkFormData : function (data){
  102. for(i=0; i<data.length; i++){
  103. let item = data[i]
  104. let name = item.name
  105. let value = item.value
  106. if(!(item.readable && item.writable)){
  107. continue
  108. }
  109. if(item.options.required){
  110. if(value == null || value.length < 1){
  111. return name+": "+ (item.options.requiredMessage || '必填项不能为空!')
  112. }
  113. }
  114. if(item.options.dataType && item.options.dataTypeCheck){
  115. switch (item.options.dataType ){
  116. case 'number':
  117. var reg = /^-?[0-9]+(\.\d+)?$/
  118. if (!reg.test(value)) {
  119. return name+": "+ item.options.dataTypeMessage
  120. }
  121. break;
  122. case 'integer':
  123. if (!(/^0$/.test(value) || /^(-[1-9]|[1-9])[0-9]*$/.test(value))) {
  124. return name+": "+ item.options.dataTypeMessage
  125. }
  126. break;
  127. case 'float':
  128. 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]*)))$/)) {
  129. return name+": "+ item.options.dataTypeMessage
  130. }
  131. break;
  132. case 'url':
  133. var reg = /^http[s]?:\/\/.*/
  134. if (!reg.test(value)) {
  135. return name+": "+ item.options.dataTypeMessage
  136. }
  137. break;
  138. case 'email':
  139. var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/
  140. if (!reg.test(value)) {
  141. return name+": "+ item.options.dataTypeMessage
  142. }
  143. break;
  144. case 'hex':
  145. var reg = /^[0-9a-fA-F]{1,3}$/
  146. if (!reg.test(value)) {
  147. return name+": "+ item.options.dataTypeMessage
  148. }
  149. break;
  150. }
  151. };
  152. if(item.options.pattern && item.options.patternMessage && item.options.patternCheck){
  153. var reg = new RegExp(item.options.pattern)
  154. if (!reg.test(value)) {
  155. return name+": "+ item.options.patternMessage
  156. }
  157. }
  158. }
  159. return ''
  160. },
  161. isNumber : function (checkVal){
  162. var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
  163. return reg.test(checkVal);
  164. }
  165. }