import { useI18n } from '@/hooks/web/useI18n' import { FormItemRule } from 'element-plus' const { t } = useI18n() interface LengthRange { min: number max: number message?: string } export const useValidator = () => { const required = (message?: string): FormItemRule => { return { required: true, message: message || t('common.required') } } const lengthRange = (options: LengthRange): FormItemRule => { const { min, max, message } = options return { min, max, message: message || t('common.lengthRange', { min, max }) } } const notSpace = (message?: string): FormItemRule => { return { validator: (_, val, callback) => { if (val?.indexOf(' ') !== -1) { callback(new Error(message || t('common.notSpace'))) } else { callback() } } } } const notSpecialCharacters = (message?: string): FormItemRule => { return { validator: (_, val, callback) => { if (/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/gi.test(val)) { callback(new Error(message || t('common.notSpecialCharacters'))) } else { callback() } } } } const isEmail = (message: string): FormItemRule => { return { validator: (_, val, callback) => { // 判断是否是邮箱 if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/g.test(val)) { callback(new Error(message)) } else { callback() } } } } const isMobilePhone = (message: string): FormItemRule => { return { validator: (_, val, callback) => { // 判断是否是手机号 if ( !/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/g.test(val) ) { callback(new Error(message)) } else { callback() } } } } return { required, lengthRange, notSpace, notSpecialCharacters, isEmail, isMobilePhone } }