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

JavaScript数字验证失效:输入1/2等分数未被判定为无效

修复天数输入验证函数,禁止分数格式输入

问题根源

原代码依赖parseFloat()判断输入合法性,但parseFloat("1/2")会仅解析出数字1并忽略后续的/2,导致isNaN(parseFloat("1/2"))返回false,无法识别分数格式为无效输入。

解决方案

使用正则表达式严格校验输入格式,确保输入只能是整数或合法浮点数,同时修复错误计数的递增逻辑(原代码中字符串类型的计数递增存在逻辑错误)。

修正后的代码

JavaScript 验证函数

function VerifyNumDays(Numdays) {
  // 将错误计数转为整数,默认值为0
  var vErrorMsgCount = parseInt(document.getElementById('ErrorMsgCount_ID').value) || 0;
  // 正则规则:仅允许整数或带小数的数字,禁止分数、特殊字符
  const validNumPattern = /^\d+(\.\d+)?$/;

  // 第一步:校验输入格式是否合法
  if (!validNumPattern.test(Numdays.trim())) {
    if (vErrorMsgCount < 2) {
      alert("天数必须是有效数字(整数或浮点数,禁止1/2这类分数格式)");
    }
    document.getElementById('SubmitButton_ID').disabled = true;
    document.getElementById('ErrorMsgCount_ID').value = vErrorMsgCount + 1;
    return;
  }

  // 第二步:校验数值有效性
  const numDaysValue = parseFloat(Numdays);
  if (isNaN(numDaysValue)) {
    if (vErrorMsgCount < 2) {
      alert("天数必须是有效数字");
    }
    document.getElementById('SubmitButton_ID').disabled = true;
    document.getElementById('ErrorMsgCount_ID').value = vErrorMsgCount + 1;
    return;
  }

  if (numDaysValue <= 0) {
    if (vErrorMsgCount < 2) {
      alert("天数必须大于0");
    }
    document.getElementById('SubmitButton_ID').disabled = true;
    document.getElementById('ErrorMsgCount_ID').value = vErrorMsgCount + 1;
    return;
  }

  // 第三步:校验天数是否超出日期范围
  const dStart = Date.parseExact(document.getElementById('calfield1').value, "MM/dd/yyyy");
  const dEnd = Date.parseExact(document.getElementById('calfield2').value, "MM/dd/yyyy");

  if (dStart && dEnd) {
    const StartCalculated = addDays(dStart, numDaysValue - 1);
    if (StartCalculated > dEnd) {
      alert("输入的天数超出了起止日期之间的天数范围");
      document.getElementById('SubmitButton_ID').disabled = true;
    } else {
      document.getElementById('SubmitButton_ID').disabled = false;
    }
  } else {
    alert("请输入有效的起止日期");
    document.getElementById('SubmitButton_ID').disabled = true;
  }
}

关键修改点

  1. 正则格式校验:通过/^\d+(\.\d+)?$/直接拦截分数、特殊字符等非法格式,确保输入仅为整数或浮点数。
  2. 错误计数修复:将从DOM获取的计数转为整数后再递增,避免字符串操作导致的计数失效。
  3. 日期判断增强:增加对起止日期解析结果的校验,避免因日期格式错误导致的后续逻辑崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:05:27