You need to enable JavaScript to run this app. Vue中m:ss时间格式输入正则存在分钟≥6时无法输入后续内容bug求助
优惠活动
大模型
产品
解决方案
定价
更多

Vue中m:ss时间格式输入正则存在分钟≥6时无法输入后续内容bug求助

问题根因分析
  • 你的b变量取值逻辑错误:直接在带冒号的原始输入字符串上执行replace(/[^0-5]/g, "")后取索引1的字符,当你输入分钟位6之后,输入第二个字符时会触发拼接逻辑,此时原始字符串变为6:,索引1的位置是冒号,会被正则过滤为空,所以b始终是空值,无法拼接出秒的部分,导致输入卡住。
  • 整体取值逻辑错位:你没有先统一提取输入中的纯数字序列,而是在带有冒号的原始字符串上按索引取数,冒号的存在会导致数字的实际位置和你预期的索引不一致。
修复方案

你的input组件代码无需修改,仅替换watch中的formatTime监听逻辑即可:

watch: {
  formatTime (newVal) {
    // 第一步:提取所有数字,最多保留3位(1位分钟+2位秒)
    const pureNum = newVal.replace(/[^0-9]/g, '').substr(0, 3)
    const len = pureNum.length
    let result = pureNum
    if (len >= 2) {
      const minute = pureNum[0]
      // 秒的十位强制限制为0-5,符合校验规则
      const secondTen = Math.min(+pureNum[1], 5)
      const secondUnit = len >=3 ? pureNum[2] : ''
      result = `${minute}:${secondTen}${secondUnit}`
    }
    // 避免值不变时重复赋值触发死循环
    if (result !== newVal) {
      this.formatTime = result
    }
  }
}
校验效果说明
  • 输入6→显示6,输入61→自动补冒号显示6:1,输入611→显示6:11,符合分钟位允许0-9的要求
  • 输入161→秒的十位是6会被自动限制为5,最终显示1:51,避免秒数超过59
  • 自动过滤所有非数字输入,不需要用户手动输入冒号,输入过程中自动补全格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:24:04