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

Angular2+ TypeScript正则限制负小数输入逗号及负号问题修复

修复负号输入与阻止逗号的输入校验问题

核心修改点

  • 直接拦截逗号输入:在按键事件中优先判断逗号,直接阻止输入,比正则校验更高效
  • 调整正则规则:允许输入过程中的临时合法状态(如单独负号、负号加小数点),同时保证最终输入为合法正负小数(最多5位小数)

修改后的完整代码

private el: HTMLInputElement;

private check(value: string) {
  // 允许空值、单独负号、负号加小数点,以及合法的正负小数(最多5位小数)
  const regExpString = "^-?\\s*(\\d*(\\.\\d{0,5})?)?\\s*$";
  // 额外检查是否包含逗号,存在则直接不通过
  if (value.includes(',')) return null;
  return String(value).match(new RegExp(regExpString));
}
@HostListener("keydown", ["$event"])
onKeyDown(v) {
  // 直接拦截逗号按键
  if (v.key === ',') {
    v.preventDefault();
    return;
  }

  const value: string = this.el.value;
  const next: string = value.concat(v.key); 
  if (next && !this.check(next)) { 
    v.preventDefault();
  }
}

可选优化:失焦时严格校验

如果需要确保用户最终输入的不是空值、单独负号或小数点,可以添加失焦事件校验:

@HostListener("blur")
onBlur() {
  const value = this.el.value.trim();
  // 严格规则:必须是带数字的正负小数/整数
  const strictReg = "^-?\\s*(\\d+(\\.\\d{0,5})?|\\d*\\.\\d{1,5})\\s*$";
  if (!value.match(new RegExp(strictReg))) {
    // 此处可根据需求处理,比如清空输入框
    this.el.value = '';
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:40:18