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

JavaScript中.length无法检测字符't' 如何实现数量输入合法性校验

问题根因
  • 直接对输入值调用了parseInt,该方法会自动截断字符串开头的数字部分,忽略后续所有非数字内容,比如parseInt('3t')返回值是3,不会触发isNaN校验,你后续用来做校验的变量是已经截断非数字后的结果,自然检测不到非法字符
  • 手写的字符校验逻辑本身存在错误,还有拼写问题:isNan写法错误,该方法大小写敏感,正确写法是isNaN
  • 用来做校验的s_input3是parseInt转换后再转的字符串,本身已经删掉了所有非数字字符,用这个变量做校验没有意义
修复方案

直接对原始的输入字符串做全量正则校验,确认整个字符串都是非负数字之后再做类型转换,不需要写循环逐字符判断,代码更简洁也不容易出错。

修改后的完整代码
function addProduct(){ 
  var input = document.getElementById("productName").value; 
  var input2 = document.getElementById("cost").value; 
  // 先获取原始的数量输入字符串
  var rawQuantity = document.getElementById("quantity").value;
  var table = document.getElementsByTagName('table')[0]; 

  // 成本校验逻辑可以保留,也可以参考数量的正则校验做优化,避免类似问题
  if (isNaN(input2) || input2<0) { 
    alert("输入不是有效数字"); 
    return(-1); 
  }

  // 新增全量正则校验,确保整个输入内容都是数字,没有其他字符
  const numberReg = /^\d+$/;
  if (!numberReg.test(rawQuantity)) {
    alert("数量必须为非负整数");
    return(-3);
  }
  // 校验通过后再做类型转换
  var input3 = parseInt(rawQuantity);
  if (input3 < 0) {
    alert("数量不能小于0");
    return(-1);
  }

  // 后续原有业务逻辑保留...
}

如果需要支持带小数点的数量,把正则规则替换为/^\d+(\.\d+)?$/即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:24:02