输入框input三方禁止输入方法及bug——做禁止字符输入限制时,使用拼音未确定时英文字母上屏

文章讨论了在Vue.js应用中进行input输入限制的三种常见方法,包括利用onkeyup/onkeydown事件、onblur事件以及oninput事件。作者指出第一种方法可能出现英文字母即时显示的bug,并提供了第三种方法作为解决方案,即在oninput事件中实时过滤非法字符。
摘要由CSDN通过智能技术生成

做input框输入限制时碰到的一个坑:

一般做禁止输入限制时有这么几种方式:

  1. 利用onkeyup onkeydown,判断输入的值,如果出现不能输入的字符,则马上利用正则替换成null。表现形式为这个字符跳一下出现一瞬间又消失。
        <!-- 控制文本框只能输入中文、英文、数字 -->
        <el-input v-model="input" onkeyup="this.value = value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" />
  2. 添加在submit事件或者blur事件中,检验输入的value值,如果包含禁输内容,则跳出提示框。检验方式也可选择正则,检验少数的特殊字符,也可用数组。
 <template>
  <div>
    <el-input v-model="input" @blur="check" />
  </div>
</template>


<script lang="ts" setup>
const input = ref()

const check = (value: string) => {
  let arr = ['<', '>', '|', '!']
  arr.forEach((it) => {
    if (value.includes(it)) {
      ElMessage({
        message: '包含非法字符',
        type: 'warning',
      })
    }
  })
}

</script>

3.禁止输入,输入禁输入字符无反应。

<template>
  <div>
    <el-input v-model="input" @oninput="checkFormat" />
  </div>
</template>

<script lang="ts" setup>
const checkFormat = (value: string) => {
  return value.replace(/[^0-9A-Za-z\u4e00-\u9fa5]*/g, '')
}
</script>

此时,我发现方法1会出现一个bug

如图,在没有按下确定的时候,英文字母就会自动上屏,确定以后就会变成这样:

解决办法:改用方法三即可 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值