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

这篇具有很好参考价值的文章主要介绍了Vue中 全局限制输入特殊字符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

传送门: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 即可文章来源地址https://www.toymoban.com/news/detail-618267.html

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

到了这里,关于Vue中 全局限制输入特殊字符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【限制输入框值类型】自定义指令el-input输入类型限制,vue和html两个版本

    经常遇到输入框需要限制只能输入数字的, 因为用户很离谱,明显输入数字的地方他非要输入英文或者中文 但是用到UI框架或者自己写方法验证表单比较麻烦 为了一个输入框专门去弄一个验证很麻烦 所以这里就整合了两种自定义指令的方式,更加方便使用 vue版本和 html版本

    2024年02月05日
    浏览(34)
  • uniapp引入全局js,vue2/vue3不同方式引入

    Hi I’m Shendi uniapp引入全局js,vue2/vue3不同方式引入 最近写小程序,个人开发,选用了 uni-app 进行开发 选用的 vue3 版本 因为我用的 vue3 版本,在这里踩了没学过vue3的坑,用vue2引入全局js的方式使用,导致undefined… Vue2 版引入全局js的方法如下 将js放到项目内,一般放到自建的

    2024年02月03日
    浏览(30)
  • vue自定义全局弹出询问框、输入框、提示框、toast(附源码)

    早前写过一篇关于vue自定义弹出询问框、输入框、提示框的贴子,当时只是实现了组件化,组件需要在各个业务模板进行引用,不能全局化使用,不太方便,本次将其改进成了全局使用,具体的业务模块不需要引入组件,直接调用main.js注册的全局方法即可。 涉及技术点: 遮

    2024年02月03日
    浏览(26)
  • 记录--封装一个通过js调用的全局vue组件

    在使用vue项目编写的时候,不可避免的会碰到需要时js api来调用组件进行显示的情况 例如饿了么element ui 的 Notification 通知、Message 消息提示等组件 虽然已经提供了,但是由于api的限制,我们只能通过特定的参数来有限的改变组件的样式 之前的文章说过可以使用 new Vue() 、

    2024年02月09日
    浏览(42)
  • 【Vue.js】Vue3全局配置Axios并解决跨域请求问题

    对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错: Access to XMLHttpRequest at \\\' http://localhost:8081/login \\\' from

    2024年02月05日
    浏览(51)
  • vue(javaScript) 操作字符串的常用方法

    1. 获取字符串长度 JavaScript中的字符串有一个length属性,该属性可以用来获取字符串的长度 2. 获取字符串指定位置的值 charAt()和charCodeAt()方法都可以通过索引来获取指定位置的值 charAt() 方法获取到的是指定位置的字符; charCodeAt()方法获取的是指定位置字符的Unicode值。 (1)

    2024年02月03日
    浏览(30)
  • Vue.js表单输入绑定

    对于Vue来说,使用v-bind并不能解决表单域对象双向绑定的需求。所谓双向绑定,就是无论是通过input还是通过Vue对象,都能修改绑定的数据对象的值。Vue提供了v-model进行双向绑定。本章将重点讲解表单域对象的双向绑定方法和技巧。 10.1  实现双向数据绑定 对于数据的绑定,

    2024年02月06日
    浏览(47)
  • iOS输入限制表情输入、最大字符、正则过滤

    平时输入会有输入限制, 1.最大字符数量 2.限制特殊字符:表情包、数字中文、大小写 3.空格换行符等特殊字符 一般的解决办法在输入时或输入完成时(根据业务需要),设置正则过滤就可以。 参考:常用正则表达式(通用字符过滤) 注意,今天说iOS的输入限制,很离谱,以

    2024年02月04日
    浏览(29)
  • vue.js表情文本输入框组件

    JS操作文本域获取光标/指定位置插入 vue.js支持表情输入 ttkwsd博客 欢迎来到我的个人博客留言评论:www.pscool.fun 不能换行的bug已处理… emoji.json 表情图片放在public的emoji文件夹下面 emoji.json放在src/components/EmojiText文件夹下,文件内容如下: EmojiText.vue 里面默认用了iconfont的字体

    2023年04月15日
    浏览(25)
  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包