vue3进阶(二)-封装utils方法——禁止输入框特殊字符校验 & form表单特定字符校验 & 自定义指令app.directive之防抖指令v-throttle

vue3进阶(二)-封装utils方法——禁止输入框特殊字符校验 & form表单特定字符校验 & 自定义指令app.directive之防抖指令v-throttle

4、引用的校验方法

src\utils\validate.ts

//  禁止输入框特殊字符校验 
export function replaceCommonText(e: any) {
  if (!checkSpecificKeyWord(e)) {
    // 提交关键字
    ElMessage({
      message: '不能包含关键词: ' + wordKey,
      type: 'warning',
    })
    const y = e.replace(wordKey, '')
    return y
  } else {
    const str = e.replace(
      /[`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”  ]/g,
      ''
    )
    const y = str.replace(/\s+/g, '')
    return y
  }
}

/**
 * @description form表单特定字符校验
 * @param value
 * @returns {boolean}
 */
export function validateCommonText(rule: any, value: any, callback: any) {
  const noChars = "[`~!#$^&*\"()=|{}': ; ',\\[\\].<>/?~!#¥……&*()——|{}【】‘;:”“'。,、?]‘'@ /%"
  const v = value || ''

  for (let i = 0; i < noChars.length; i++) {
    const char = noChars[i]
    if (v.indexOf(char) != -1) {
      callback(new Error('不能使用特殊字符'))
      return
    }
  }
使用教程

特殊字符校验

  1. 介绍:输入框禁止输入特殊字符

第一步引入:

import { replaceCommonText } from '@src/utils/validate'

第二步页面应用:

<el-input v-model.trim="formInline.prjName" @input="(e) => (formInline.prjName = replaceCommonText(e))"/>
  1. 介绍:form 表单特殊字符验证

第一步引入:

import { validateCommonText } from '@src/utils/validate'

第二步在 rules 校验中用法:

 { validator: validateCommonText, trigger: 'blur' },

公共方法

全局防抖 - 添加防抖指令

<el-button v-throttle="3000" > 保存 </el-button>   
防抖方法

library\plugins\directive.ts

import type { DirectiveBinding } from 'vue'

export function setup(app: any) {
  /**
   * @description 自定义指令v-throttle
   */
  app.directive('throttle', {
    mounted(el: any, binding: DirectiveBinding) {
      let { throttleTime } = binding.value
      if (!throttleTime) {
        throttleTime = 1000
      }
      let timer: any
      let disable = false
      el.addEventListener(
        'click',
        (event: any) => {
          if (timer) {
            clearTimeout(timer)
          }
          if (!disable) {
            disable = true
          } else {
            event && event.stopImmediatePropagation()
          }
          timer = setTimeout(() => {
            timer = null
            disable = false
          }, throttleTime)
        },
        true
      )
    },
  })
}