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

使用正则表达式实现游戏游玩次数整数输入验证失效求助

游戏游玩次数输入验证问题排查与修复

问题分析

你的代码主要存在以下几个关键问题:

  • 正则表达式使用错误:你试图用!=让单个数字和正则对象比较,这完全不符合正则的使用逻辑。正则需要通过test()方法检测字符串是否匹配,而且你的拆分数组验证的思路完全没必要,直接验证用户输入的原始字符串即可。
  • 输入转换逻辑漏洞:当用户输入非数字内容时,Number(prompt())会返回NaN,将NaN转为字符串是"NaN",再拆成数组得到[NaN, NaN],此时循环验证根本起不到作用。
  • 循环验证逻辑失效:就算触发了重新输入的逻辑,循环不会从头执行,会继续原来的索引,导致输入错误后依然可能跳过验证。
  • 多余的正则全局标志:你的正则是用来验证整个输入是否为正整数,g全局标志在这里毫无意义,反而可能引发后续匹配异常。

修复后的代码

let playCount = 0;
// 验证非负整数的正则,若需排除0可改为 /^[1-9][0-9]*$/
const regxNum = /^[0-9]+$/; 

function askPlayCount() {
  const input = prompt("How many times you want to play: ");
  // 直接验证用户输入的原始字符串
  if (regxNum.test(input)) {
    playCount = Number(input);
  } else {
    alert("Please enter valid input");
    // 递归调用直到输入符合要求
    askPlayCount();
  }
}

askPlayCount();
// 验证通过后可在此处编写游戏逻辑
console.log(`You will play ${playCount} times`);

修复说明

  1. 直接针对用户输入的原始字符串做正则验证,避免了转换为Number时出现NaN的问题。
  2. 使用regxNum.test(input)正确判断输入是否符合正整数格式。
  3. 通过递归调用askPlayCount(),确保用户输入正确后才继续执行后续逻辑,流程更可靠。
  4. 删除了不必要的数组转换和循环验证,简化了代码结构,提升可读性。

内容的提问来源于stack exchange,提问作者mr.Hritik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:45:14