bjx-validate.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import validate from './validate.js'
  2. // 默认校验规则
  3. const rules = {
  4. // 自定义规则
  5. ...validate,
  6. // 数据类型
  7. type: function(val, param) {
  8. let msgObj = {'string': '字符串', 'boolean': '布尔值', 'objec': '对象'}
  9. if(param[0] == 'number') {
  10. if(val == '' || isNaN(Number(val))) {
  11. return '不是一个数字'
  12. }
  13. } else if(typeof val != param[0]){
  14. return msgObj[param[0]] ? '不是' + msgObj[param[0]] : '数据类型不符合'
  15. }
  16. return true
  17. },
  18. // 值 小于等于
  19. max: function(val, param) {
  20. let msg = this.type(val,['number'])
  21. if(msg !== true) {
  22. return msg
  23. }
  24. if(val > param[0]) {
  25. return '值不能超过' + param[0]
  26. }
  27. return true
  28. },
  29. // 值 大于等于
  30. min: function(val, param) {
  31. let msg = this.type(val,['number'])
  32. if(msg !== true) {
  33. return msg
  34. }
  35. if(val.length < param[0]) {
  36. return '值不能小于' + param[0]
  37. }
  38. return true
  39. },
  40. /*
  41. * 长度范围
  42. * 1. length:2 长度等于某值
  43. * 2. length:0,2 长度在某区间
  44. * 3. length:2,~ 长度不小于
  45. * 4. length:~,5 长度不大于
  46. */
  47. length: function(val, param) {
  48. if(param.length > 1) {
  49. if(param[1].trim() == '~' && val.length < param[0]) {
  50. return '长度不能小于' + param[0]
  51. } else if (param[0].trim() == '~' && val.length > param[1]){
  52. return '长度不能超过' + param[1]
  53. } else if(val.length < param[0] || val.length > param[1]) {
  54. return '长度应在' + param[0] + '~' + param[1] + '之间'
  55. }
  56. }else if(val.length != param[0]){
  57. return '长度应等于' + param[0]
  58. }
  59. return true
  60. },
  61. // 值的范围
  62. between: function(val, param) {
  63. if(param.length > 1) {
  64. if(Number(val) < Number(param[0]) || Number(val) > Number(param[1])) {
  65. return '应在' + param[0] + '~' + param[1] + '之间'
  66. }
  67. }else if(val != param[0]){
  68. return '应等于' + param[0]
  69. }
  70. return true
  71. },
  72. // 校验值在给定的值中
  73. in: function(val, param) {
  74. if(!param.includes(val)){
  75. return '应该在' + param.join() + '之中'
  76. }
  77. return true
  78. },
  79. // 校验值是否与某字段值相等
  80. eq: function(val, param, from) {
  81. if(from[param[0]] && val != from[param[0]]){
  82. return '与' + param[0] + '不相等'
  83. }
  84. return true
  85. },
  86. reg: function(val, param) {
  87. var reg = new RegExp(param);
  88. if (!reg.test(val)) {
  89. return '不符合正则'
  90. }
  91. return true
  92. },
  93. date: function(val) {
  94. if (new Date(val).getDate()!=val.substring(val.length-2)) {
  95. return '不是一个有效的日期'
  96. }
  97. return true
  98. },
  99. }
  100. // 字符串转数组
  101. function getArr(val,str) {
  102. return val.split ? val.split(str) : val
  103. }
  104. // 表单默认规则校验 通过返回 true 不通过返回对象 {msg:'不通过原因','rule': '规则名'}
  105. export const fromCheck = function(val, rule,form) {
  106. // 'type: string|length:5|in:1,3|between:0,5' 字符串形式
  107. // ['type: string','length:5','in:1,3','between:0,5'] // 数组、字符串混合
  108. // ['string',['length',5],['in',[1,3],['between', [0,5]]]] 最终形式
  109. rule = getArr(rule,'|')
  110. const len = rule.length;
  111. for (let i = 0; i < len; ++i ) {
  112. let key = '',param = ''
  113. if(rule[i].indexOf('reg') == 0){
  114. // 正则
  115. key = 'reg'
  116. param = rule[i].slice(rule[i].indexOf(':') + 1)
  117. }else{
  118. rule[i] = getArr(rule[i],':')
  119. key = rule[i][0].trim()
  120. param = rule[i][1] ? getArr(rule[i][1],',') : [];
  121. }
  122. if(!rules[key]) continue
  123. let msg = rules[key](val, param, form)
  124. if(msg !== true) {
  125. return {msg:msg,rule: key}
  126. }
  127. }
  128. return true
  129. }