You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Vuetify的<v-otp-input>仅接受数字输入

如何让Vuetify的仅接受数字输入

这里有几个实用的方法可以实现需求,解决官网无明确说明的问题:

方法1:利用原生HTML属性限制输入

<v-otp-input>支持透传原生input属性,你可以直接设置input-mode="numeric"和pattern="[0-9]*",搭配type="tel"还能让移动端弹出数字键盘,提升输入体验。不过这种方式在桌面端仍可能允许输入非数字(比如通过键盘输入字母),适合作为基础限制:

<v-otp-input
  v-model="otpCode"
  input-mode="numeric"
  pattern="[0-9]*"
  type="tel"
></v-otp-input>

方法2:通过输入事件拦截过滤非数字

监听组件的@input事件,手动过滤掉所有非数字字符,确保绑定的v-model始终是纯数字内容,这种方式能彻底拦截非数字输入:

<template>
  <v-otp-input
    v-model="otpCode"
    @input="filterNonNumeric"
  ></v-otp-input>
</template>

<script setup>
import { ref } from 'vue'

const otpCode = ref('')

const filterNonNumeric = () => {
  // 替换所有非数字字符为空
  otpCode.value = otpCode.value.replace(/[^0-9]/g, '')
}
</script>

方法3:结合两种方式(推荐)

把原生属性和事件拦截结合起来,既优化移动端输入体验,又能彻底过滤非数字内容,覆盖所有场景:

<template>
  <v-otp-input
    v-model="otpCode"
    input-mode="numeric"
    pattern="[0-9]*"
    type="tel"
    @input="filterNonNumeric"
  ></v-otp-input>
</template>

<script setup>
import { ref } from 'vue'

const otpCode = ref('')

const filterNonNumeric = () => {
  otpCode.value = otpCode.value.replace(/[^0-9]/g, '')
}
</script>

注意:如果使用Vue 2,只需调整script部分为选项式API即可,逻辑完全一致。

内容的提问来源于stack exchange,提问作者YUN0814

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:20:01