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

如何限制input标签仅允许修改小数点后的数字(基于react-hook-form)

解决方案

要实现始终保留0.前缀、仅允许修改小数点后数字的需求,你可以直接修改onChange的处理逻辑,配合react-hook-form的表单规则来实现,修改后的代码如下:

import { useForm } from "react-hook-form";

// 组件内的表单初始化
const { register, setValue, formState: { errors } } = useForm({
  defaultValues: {
    version: "0." // 初始值设为0.,确保前缀存在
  }
});

// 渲染输入框
<input
  type="text"
  {...register("version", {
    pattern: {
      value: /^0\.\d*$/,
      message: "请输入0.xxx格式的版本号"
    }
  })}
  onChange={(e) => {
    // 只保留输入中的数字字符
    const numericPart = e.target.value.replace(/[^0-9]/g, "");
    // 强制拼接固定前缀和数字部分
    const formattedValue = `0.${numericPart}`;
    // 更新表单值并触发验证
    setValue("version", formattedValue, { shouldValidate: true });
  }}
  className={`form-control project-form-control rounded-0 input-digga2 ${errors.version ? "is-invalid" : ""}`}
  name="version"
/>

关键逻辑说明

  • 初始值兜底:表单初始化时给version设置"0.",保证输入框一开始就有正确的前缀,不会出现空值或错误格式。
  • 输入过滤修正:不管用户输入什么内容,先把非数字的字符全部过滤掉,只保留数字部分,再拼回0.后面——就算用户试图删除前缀、输入字母或符号,最终都会被修正成符合要求的格式。
  • 精准验证规则:把register里的验证规则改成/^0\.\d*$/,精准匹配0.开头加任意数字的格式,还能自定义错误提示文案。
  • 实时验证反馈:调用setValue时添加shouldValidate: true参数,每次修改值后立刻触发表单验证,错误状态会实时同步到输入框的样式上。

如果需要要求小数点后至少有一位数字,可以把正则改成/^0\.\d+$/,同时初始值设为"0.0"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:11:30