useValidator.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { useI18n } from '@/hooks/web/useI18n'
  2. const { t } = useI18n()
  3. type Callback = (error?: string | Error | undefined) => void
  4. interface LengthRange {
  5. min: number
  6. max: number
  7. message: string
  8. }
  9. export const useValidator = () => {
  10. const required = (message?: string) => {
  11. return {
  12. required: true,
  13. message: message || t('common.required')
  14. }
  15. }
  16. const lengthRange = (val: any, callback: Callback, options: LengthRange) => {
  17. const { min, max, message } = options
  18. if (val.length < min || val.length > max) {
  19. callback(new Error(message))
  20. } else {
  21. callback()
  22. }
  23. }
  24. const notSpace = (val: any, callback: Callback, message: string) => {
  25. // 用户名不能有空格
  26. if (val.indexOf(' ') !== -1) {
  27. callback(new Error(message))
  28. } else {
  29. callback()
  30. }
  31. }
  32. const notSpecialCharacters = (val: any, callback: Callback, message: string) => {
  33. // 密码不能是特殊字符
  34. if (/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/gi.test(val)) {
  35. callback(new Error(message))
  36. } else {
  37. callback()
  38. }
  39. }
  40. // 两个字符串是否想等
  41. const isEqual = (val1: string, val2: string, callback: Callback, message: string) => {
  42. if (val1 === val2) {
  43. callback()
  44. } else {
  45. callback(new Error(message))
  46. }
  47. }
  48. return {
  49. required,
  50. lengthRange,
  51. notSpace,
  52. notSpecialCharacters,
  53. isEqual
  54. }
  55. }