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

JavaScript正则实现仅允许正负数字且最多一个负号的输入限制问题

解决方案:限制输入仅为正负数且负号唯一

直接替换你的oninput事件逻辑,用以下代码就能满足需求:

oninput="
  // 第一步:过滤所有非合法字符(仅保留数字、负号、小数点)
  this.value = this.value.replace(/[^-0-9.]/g, '');
  // 第二步:移除开头以外的所有负号(负号只能在最前面)
  this.value = this.value.replace(/(?!^)-/g, '');
  // 第三步:如果开头有多个负号,只保留第一个
  this.value = this.value.replace(/^-+/, '-');
"

代码说明

  • 第一步和你原来的逻辑一致,先把所有不属于数字、负号、小数点的字符过滤掉。
  • 第二步用(?!^)-匹配不在字符串开头的负号,直接删除,避免出现12-3这种非法格式。
  • 第三步用^-+匹配开头连续的多个负号,替换成单个负号,解决你遇到的---23这类问题。

可选优化:限制小数点唯一

如果还需要限制输入的数字只能有一个小数点(比如避免12.34.56这种情况),可以再加两行逻辑:

// 把连续的多个小数点替换成单个
this.value = this.value.replace(/\.+/g, '.');
// 确保整个字符串只有一个小数点
this.value = this.value.replace(/^(\-?\d*)\.(\d*)\./g, '$1.$2');

重要提醒

前端输入限制只是提升用户体验的辅助手段,后端必须对输入内容再次做校验,防止绕过前端限制的恶意提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:30:13