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

React Native中TextInput如何限制仅输入最多两位小数且不超过最大值

以下是我在React-Native中使用的TextInput组件代码片段:
输入代码预览

模拟器上的渲染效果如下:
模拟器渲染效果预览

我需要让该输入框仅接受≤11.99的十进制数值,用于模拟人体身高英寸值的最高录入限制,目前我在onChangeText函数中更新对应state的值。请问我该如何实现输入值的范围限制?是否可以直接在onChangeText内部校验数值后再对应赋值?


可以直接在onChangeText内部完成校验后再更新state,这是实现这类输入限制最常用、最直接的方案。

实现逻辑说明

需要覆盖三类校验规则:

  • 仅允许输入数字和小数点,过滤其他所有字符
  • 仅保留1个小数点,且小数点后最多保留2位
  • 整体数值不得超过11.99

完整代码示例

import { useState } from 'react';
import { TextInput } from 'react-native';

const HeightInput = () => {
  const [inchHeight, setInchHeight] = useState('');

  const handleInputChange = (inputVal) => {
    // 1. 过滤非法字符,只保留数字和小数点
    let filteredVal = inputVal.replace(/[^0-9.]/g, '');

    // 2. 处理小数点规则:仅保留1个小数点,最多2位小数
    const dotPosition = filteredVal.indexOf('.');
    if (dotPosition !== -1) {
      filteredVal = filteredVal.slice(0, dotPosition + 3);
    }

    // 3. 数值范围校验
    const numVal = parseFloat(filteredVal);
    if (!isNaN(numVal) && numVal > 11.99) {
      // 超过上限可选择直接不更新,或者自动赋值为上限值11.99
      // setInchHeight('11.99');
      return;
    }

    // 所有校验通过后更新状态
    setInchHeight(filteredVal);
  };

  return (
    <TextInput
      value={inchHeight}
      onChangeText={handleInputChange}
      keyboardType="decimal-pad" // 弹出带小数点的数字键盘,减少非法输入概率
      placeholder="请输入身高(英寸)"
      // 其余原有属性保持不变即可
    />
  );
};

可选优化

如果产品要求输入超过上限时自动修正为上限值,只需要把校验逻辑里的return替换为setInchHeight('11.99')即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:15:05