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

如何禁止在PrimeReact的InputText输入框中输入数字

解决方案

你遇到的核心问题是:type="text"的输入框无论输入什么内容,拿到的都是字符串类型,所以typeof ... === 'number'这个判断永远不会触发。下面给你两种直接可行的解决思路:

1. 从输入源头过滤数字(推荐)

修改你的handleChange函数,在更新值之前把所有数字字符过滤掉,用户输入数字时直接不会显示在输入框里:

const handleChange = (e) => {
  // 用正则替换掉所有0-9的数字
  const cleanValue = e.target.value.replace(/[0-9]/g, '');
  // 根据你的表单库(比如Formik)或状态管理方式更新值,示例用Formik的setFieldValue
  setFieldValue(e.target.name, cleanValue);
};

同时给输入框加onKeyDown事件,阻止数字键输入,提升交互体验:

<FloatingLabel text="Name" name={`luxmeds.${index}.persons.${idx}.name`}>
  <StyledInputText
    name={`luxmeds.${index}.persons.${idx}.name`}
    value={person.name}
    onChange={handleChange}
    type="text"
    onKeyDown={(e) => {
      // 阻止主键盘和小键盘的数字键输入
      const isNumberKey = /[0-9]/.test(e.key) || (e.keyCode >= 96 && e.keyCode <= 105);
      if (isNumberKey) e.preventDefault();
    }}
  />
</FloatingLabel>

2. 校验已有内容并提示

如果需要保留用户输入的数字但给出警告,把原来的类型判断换成正则校验,检查字符串中是否包含数字:

{!values.luxmeds[index].persons[idx].name && (
  <StyledWarningText>请填写名称</StyledWarningText>
)}
{values.luxmeds[index].persons[idx].name?.match(/[0-9]/) && (
  <StyledWarningText>名称不能包含数字</StyledWarningText>
)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:15:42