1. 校验不能输入特殊字符,用oninput="value=value.replace(/[^\u4E00-\u9FA5A-Za-z0-9]/g,'')"不就行了吗?结果发现有bug,因为输入汉字的时候,还没有选择汉字,英文也会出发oninput事件,比如,你想输入“您好”,input框里会出来“ninhao您好”,为了解决这个问题,我想到了可以用vue的自定义指令,下面是代码。
import Vue from 'vue'
Vue.directive('inputLimSpeChar', {
    bind: function (el, binding, vnode) {
        let isInputZh = false;
        // 自定义正则表达式
        var regRule = /[^\u4E00-\u9FA5a-zA-Z0-9]/g
        el.$handle = function () {
            if(!isInputZh){
                let val = el.getElementsByTagName('input')[0].value 
                el.getElementsByTagName('input')[0].value  = val.replace(regRule, '')
                
                trigger(el, 'input')
            }
            
        }
        el.$isTrue =function (){
            isInputZh = true
        }
        el.$isFalse =function (){
            isInputZh = false
        }
        el.addEventListener("compositionstart", el.$isTrue)
        el.addEventListener("compositionend", el.$isFalse)
        el.addEventListener('keyup', el.$handle)
    },
    unbind: function (el) {
        el.removeEventListener("compositionstart", el.$isTrue)
        el.removeEventListener("compositionend", el.$isFalse)
        el.removeEventListener('keyup', el.$handle)
    },
});
const trigger = (el, type) => {
    let ev = document.createEvent('HTMLEvents');//创建HTML事件
	ev.initEvent(type,true,true);//初始化事件,type为事件类型,如input
	el.dispatchEvent(ev);//派发事件
}

3.在main.js中引入

import '@/directive/inputLimSpeChar.js'

4.使用

<el-input
 v-model="queryParams.ruleTypeName"
    placeholder="请输入"
    v-inputLimSpeChar
    clearable
></el-input>
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐