首页 > 其他分享 >Vue中 全局限制输入特殊字符

Vue中 全局限制输入特殊字符

时间:2023-08-07 11:36:17浏览次数:34  
标签:el Vue const 自定义 inp -+ 全局 type 特殊字符


传送门:Vue实现自定义指令(directive)及应用场景

背景:开发中遇到的表单输入,常常会限制特殊字符的输入 以满足安全性测试的要求。

1. 单独处理每个文本框

<template>
  <el-input 
    v-model="content" 
    placeholder="请输入"
    @change="vaidateEmoji">
  </el-input>
</template>

<script> 
export default {
  methods: {
    vaidateEmoji() {
       const regRule = /[`~^!@#$€£₤%^&*()_\-+=<>?:"{}|.\/;'\\[\]·~!……@#¥¥%*()\-+={}|《》?:“”【】‘']/im;
       this.content = this.content.replace(regRule, '');
    },
  },
}
</script>

这样每个输入框单独处理,工作量较大且不好维护,所以需要自定义一个指令来统一实现这一需求。

2. 自定义指令全局统一处理(推荐)

2.1 自定义限制输入特殊字符指令

// emoji.js
import Vue from 'vue';

// 禁止输入特殊字符
Vue.directive('emoji', {
  bind: function (el, binding, vnode) {
    // 正则规则可根据需求自定义
    const regRule = /[`~^!@#$€£₤%^&*()_\-+=<>?:"{}|.\/;'\\[\]·~!……@#¥¥%*()\-+={}|《》?:“”【】‘']/im;
    let $inp = findEle(el, 'input') || findEle(el, 'textarea');
    el.$inp = $inp;
    $inp.handle = function (event) {
      let val = $inp.value;
      $inp.value = val.replace(regRule, '');
      trigger($inp, 'input');
    }
    $inp.addEventListener('keyup', $inp.handle);
  },
  unbind: function (el) {
    el.$inp.removeEventListener('keyup', el.$inp.handle);
  }
});
 
const findEle = (parent, type) => {
  return parent.tagName.toLowerCase() === type ? parent : parent.querySelector(type)
};
 
const trigger = (el, type) => {
  const e = document.createEvent('HTMLEvents');
  e.initEvent(type, true, true);
  el.dispatchEvent(e);
};

2.2 在 main.js 中引入该自定义组件

import '@/directives/emoji.js';

2.3 在组件中使用
在需要校验的输入框(多行文本框)加上 v-emoji 即可

<el-input 
  v-emoji
  v-model="content" 
  placeholder="请输入">
</el-input>


标签:el,Vue,const,自定义,inp,-+,全局,type,特殊字符
From: https://blog.51cto.com/u_15302032/6991950

相关文章

  • 拖拽宫格vue-grid-layout详细应用及案例
    目录1、前言2、安装3、属性4、事件5、占位符样式修改6、案例1、前言vue-grid-layout是一个适用于vue的拖拽栅格布局库,功能齐全,适用于拖拽+高度/宽度自由调节的布局需求。本文将讲述一些常用参数和事件,以及做一个同步拖拽的Demo。效果动态图如下:2、安装vue2版本:npminstall......
  • 前端 Vue 应该知道的一些东西,个人笔记 2021-11-26
    前端代码编写规范及es6常用语法命名规范文件夹名称,文件名称,组件名称,统一使用大驼峰或者小横线方式命名;组件文件名:list-item.vue.或者ListItem.vue;基础的无状态的通用组件加VBaseApp前缀BaseButtonAppButton在html中<base-button>或者<BaseButton>url路径名:小......
  • 【Vue笔记链接总结】
    【Vue笔记链接总结】【一】前端发展史【1.0】前端的发展史-Chimengmeng-博客园(cnblogs.com)【二】Vue之介绍及引入【2.0】Vue之引入-Chimengmeng-博客园(cnblogs.com)【三】Vue之基础语法【3.0】Vue之语法-Chimengmeng-博客园(cnblogs.com)【四】Vue......
  • vue-router addRoute将子路由添加到指定路由下
    router.addRoute()可以向vue路由中动态的添加路由信息,但,路由存在多层级关系,例如,最开始的路由是这样的:{path:'/',name:'layout',component:resolve=>require(['../layout'],resolve),meta:{title:'',handleStatus:......
  • 【8.0】Vue之ref属性
    【ref属性】ref属性,vue提供的,写在标签上可以写在普通标签:在vue中使用this.$refs.名字拿到dom对象,可以原生操作可以写在组件上:在vue中使用this.$refs.名字拿到[组件]对象,组件属性,方法直接使用即可【详解】ref属性是Vue.js中提供的一种特殊属性,它可以用于在标签上......
  • 【9.0】Vue之项目规范
    【一】vue-cli创建项目【1】引入单页面应用(SPA)单页面应用(SinglePageApplication,简称SPA)是一种Web应用程序的架构方式。传统的多页面应用中,每次导航到新页面都会进行整个页面的重新加载。而SPA只有一个主页面(通常是index.html),页面的内容通过动态渲染来更新,不会重新加载整......
  • 【七】Vue之Vue-cli
    【一】Vue-CLI项目搭建【二】Vue-CLI项目搭建参考步骤Vue-CLI(VueCommandLineInterface)是Vue.js官方提供的一个基于命令行的快速搭建Vue项目的工具。它为我们创建一个Vue项目提供了简单易用的脚手架。【1】安装Node.js:首先需要安装Node.js,因为Vue-CLI是基于Node.js运......
  • 【十】Vue之高级
    【一】ref属性【1】详解被用来给元素或子组件注册引用信息(id的替代者)应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc)在Vue中,$refs是一个特殊的属性,用于给元素或子组件注册引用信息。它允许我们在模板或组件中通过引用名称来访问对应的DOM元素或......
  • 【十一】Vue之Vue3
    【一】Vue3的变化【1】性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%【2】源码的升级使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking【3】拥抱TypeScriptVue3可以更好的支持TypeScript【4】新的特性Composition......
  • 【3.0】Vue之语法
    【一】插值语法<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><!--Vue文件--><scriptsrc="https://cdn.bootcdn.net/ajax/libs/vue/2.7.9/vu......