form-validate.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /** 参数解析
  2. name:name,表单中的值属性 如userInfo.name中的name
  3. required: true, 为true则为必填项,不填则为非填项
  4. type: 'email', 验证的类型,比如验证邮箱,就填 email
  5. errmsg: '请输入正确的邮箱' , 提示的信息
  6. */
  7. const numberReg = /^-?[1-9][0-9]?.?[0-9]*$/
  8. const intReg = /^-?[1-9][0-9]*$/
  9. const phoneReg = /^1[0-9]{10,10}$/
  10. const emailReg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
  11. const pwdReg = /^.{6,16}$/
  12. const inviteCodeReg = /^[a-zA-Z0-9]{6,16}$/
  13. export default {
  14. isNumber: function(val) {
  15. return numberReg.test(val)
  16. },
  17. isInt: function(val) {
  18. return intReg.test(val)
  19. },
  20. isPhone: function(val) {
  21. return phoneReg.test(val)
  22. },
  23. isEmail: function(val) {
  24. return emailReg.test(val)
  25. },
  26. isPwd: function(val) {
  27. return pwdReg.test(val)
  28. },
  29. isInviteCode: function(val) {
  30. return inviteCodeReg.test(val)
  31. },
  32. validate: function(data, rules) {
  33. let res = { isOk: true, errmsg: '' }
  34. if (!rules || !rules.length) {
  35. return res
  36. }
  37. for (let rule of rules) {
  38. // rule: {name:'', type:'', errmsg:'', min:1, max:2, eq:'', required:Boolean, regex:''}
  39. if (!rule || !rule.name || !rule.type) {
  40. continue
  41. }
  42. // 如果值不存在
  43. if (!data[rule.name]) {
  44. // 如果是必填项就返回错误提示,required可以作为type是为了不同的type能给用户不同的提示
  45. if (rule.type === 'required' || rule.required) {
  46. res = { isOk: false, errmsg: rule.errmsg }
  47. if (!res.errmsg) {
  48. res.errmsg = '请正确输入所有数据' //默认提示
  49. }
  50. return res
  51. }
  52. // 如果不是必填项就跳过
  53. continue
  54. }
  55. switch (rule.type) {
  56. // required 上面已经判断过了
  57. case 'equals':
  58. case 'eq':
  59. if (data[rule.name] !== data[rule.eqName]) {
  60. res = { isOk: false, errmsg: rule.errmsg }
  61. }
  62. break
  63. case 'number':
  64. if (!numberReg.test(data[rule.name])) {
  65. res = { isOk: false, errmsg: rule.errmsg }
  66. }
  67. break
  68. case 'int':
  69. if (!intReg.test(data[rule.name])) {
  70. res = { isOk: false, errmsg: rule.errmsg }
  71. }
  72. break
  73. case 'phone':
  74. if (!phoneReg.test(data[rule.name])) {
  75. res = { isOk: false, errmsg: rule.errmsg }
  76. }
  77. break
  78. case 'email':
  79. if (!emailReg.test(data[rule.name])) {
  80. res = { isOk: false, errmsg: rule.errmsg }
  81. }
  82. break
  83. case 'pwd':
  84. if (!pwdReg.test(data[rule.name])) {
  85. res = { isOk: false, errmsg: rule.errmsg }
  86. }
  87. break
  88. case 'inviteCode':
  89. if (!inviteCodeReg.test(data[rule.name])) {
  90. res = { isOk: false, errmsg: rule.errmsg }
  91. }
  92. break
  93. case 'range': // 数字类型的值取值范围
  94. // {name: 'xxx', type: 'range', min: 6, max: 6, required: true, errmsg: 'xxx'}
  95. let val = data[rule.name]
  96. if (val) {
  97. if (numberReg.test(val)) {
  98. if (rule.min && val < rule.min) {
  99. res = { isOk: false, errmsg: rule.errmsg }
  100. } else if (rule.max && val > rule.max) {
  101. res = { isOk: false, errmsg: rule.errmsg }
  102. }
  103. } else {
  104. res = { isOk: false, errmsg: rule.errmsg }
  105. }
  106. }
  107. break
  108. case 'lengthRange': // 字符串长度取值范围
  109. // {name: 'xxx', type: 'lengthRange', min: 6, max: 6, errmsg: 'xxx'}
  110. let le = data[rule.name] ? data[rule.name].length : 0
  111. if (rule.min && le < rule.min) {
  112. res = { isOk: false, errmsg: rule.errmsg }
  113. } else if (rule.max && le > rule.max) {
  114. res = { isOk: false, errmsg: rule.errmsg }
  115. }
  116. break
  117. case 'regex': // 自定义正则表达式
  118. // {name: 'xxx', type: 'regex', regex: /^1[0-9]{10,10}$/, errmsg: 'xxx'}
  119. if (rule.regex && !rule.regex.test(data[rule.name])) {
  120. res = { isOk: false, errmsg: rule.errmsg }
  121. }
  122. break
  123. }
  124. // 发现任何一个错误就立即返回,后面的不再判断
  125. if (!res.isOk) {
  126. if (!res.errmsg) {
  127. res.errmsg = '请正确输入所有数据' //默认提示
  128. }
  129. return res
  130. }
  131. }
  132. return res
  133. }
  134. }