github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/static_source/admin/src/hooks/web/useValidator.ts (about)

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