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

如何实现十进制输入验证:禁止连续输入第二个小数点?

解决十进制输入验证:禁止多个小数点输入

你的代码思路方向是对的,但问题出在判断条件的覆盖范围上——你只阻止了输入框为空时的小数点输入,却没检查当前输入框里已经存在小数点的情况。这就导致当输入框已有内容(比如123.)时,再按小数点会被允许,出现123..的问题。

修正后的核心代码方案

我们只需要判断当前输入值中是否已经包含小数点,就能精准阻止重复输入:

if (e.which === 190) {
  // 检查输入框中是否已经存在小数点
  if (value.includes('.')) {
    e.preventDefault();
    this.setState({ [error]: "Only one period allowed in decimal numbers!" });
    return false;
  }
}

增强兼容性(可选优化)

考虑到部分用户会使用小键盘输入小数点,小键盘的小数点keyCode是110,可以同时兼容两种输入场景:

// 包含主键盘和小键盘的小数点keyCode
const decimalKeyCodes = [190, 110];
if (decimalKeyCodes.includes(e.which)) {
  if (value.includes('.')) {
    e.preventDefault();
    this.setState({ [error]: "Only one period allowed in decimal numbers!" });
    return false;
  }
}

如果需要禁止以小数点开头(保留原业务逻辑)

如果你希望用户不能输入.5这种以小数点开头的数值,可以把原有的空值判断和小数点判断合并:

const decimalKeyCodes = [190, 110];
if (decimalKeyCodes.includes(e.which)) {
  if (value === '' || value.includes('.')) {
    e.preventDefault();
    this.setState({ [error]: "Only one period allowed in decimal numbers!" });
    return false;
  }
}

这样修改后,就能彻底阻止输入第二个小数点,完全符合你的业务需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:11:28