useValidator.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { useI18n } from '@/hooks/web/useI18n'
  2. import { FormItemRule } from 'element-plus'
  3. const { t } = useI18n()
  4. interface LengthRange {
  5. min: number
  6. max: number
  7. message?: string
  8. }
  9. export const useValidator = () => {
  10. const required = (message?: string): FormItemRule => {
  11. return {
  12. required: true,
  13. message: message || t('common.required')
  14. }
  15. }
  16. const lengthRange = (options: LengthRange): FormItemRule => {
  17. const { min, max, message } = options
  18. return {
  19. min,
  20. max,
  21. message: message || t('common.lengthRange', { min, max })
  22. }
  23. }
  24. const notSpace = (message?: string): FormItemRule => {
  25. return {
  26. validator: (_, val, callback) => {
  27. if (val?.indexOf(' ') !== -1) {
  28. callback(new Error(message || t('common.notSpace')))
  29. } else {
  30. callback()
  31. }
  32. }
  33. }
  34. }
  35. const notSpecialCharacters = (message?: string): FormItemRule => {
  36. return {
  37. validator: (_, val, callback) => {
  38. if (/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/gi.test(val)) {
  39. callback(new Error(message || t('common.notSpecialCharacters')))
  40. } else {
  41. callback()
  42. }
  43. }
  44. }
  45. }
  46. const phone = (message?: string): FormItemRule => {
  47. return {
  48. validator: (_, val, callback) => {
  49. if (!val) return callback()
  50. if (!/^1[3456789]\d{9}$/.test(val)) {
  51. callback(new Error(message || '请输入正确的手机号码'))
  52. } else {
  53. callback()
  54. }
  55. }
  56. }
  57. }
  58. const email = (message?: string): FormItemRule => {
  59. return {
  60. validator: (_, val, callback) => {
  61. if (!val) return callback()
  62. if (!/^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(val)) {
  63. callback(new Error(message || '请输入正确的邮箱'))
  64. } else {
  65. callback()
  66. }
  67. }
  68. }
  69. }
  70. const maxlength = (max: number): FormItemRule => {
  71. return {
  72. max,
  73. message: '长度不能超过' + max + '个字符'
  74. }
  75. }
  76. const check = (message?: string): FormItemRule => {
  77. return {
  78. validator: (_, val, callback) => {
  79. if (!val) {
  80. callback(new Error(message || t('common.required')))
  81. } else {
  82. callback()
  83. }
  84. }
  85. }
  86. }
  87. return {
  88. required,
  89. lengthRange,
  90. notSpace,
  91. notSpecialCharacters,
  92. phone,
  93. email,
  94. maxlength,
  95. check
  96. }
  97. }