Discord机器人能力值系统问题:如何校验输入为0-5的数字?
解决Discord机器人能力值校验的问题
嘿,我完全懂你现在卡在哪了——你用||拼接字符串的写法根本没法实现“可选值列表”的效果,这是JavaScript逻辑或运算的特性导致的!
问题出在哪?
你写的这段代码:
const powerPossibilities = "0" || "1" || "2" || "3" || "4" || "5";
在JS里,逻辑或||会直接返回第一个被判定为“真”的值。而所有非空字符串都是“真”值,所以这个表达式执行后,powerPossibilities实际上只会等于"0"——后面的"1"到"5"根本不会被考虑进去。这就是为什么只有当你把它改成单独的"1"时才正常工作,那时候变量刚好等于你要校验的输入值。
正确的实现方式
我们应该用数组来存储所有允许的能力值,然后用数组的includes()方法来校验输入是否在列表内:
方案1:直接校验字符串输入(适合args[1]是字符串的情况)
// 把所有允许的值存在数组里 const validPowerValues = ["0", "1", "2", "3", "4", "5"]; let powertoset = args[1]; // 检查输入是否在允许列表中 if (!validPowerValues.includes(powertoset)) { return message.reply("Invalid number - please enter a number between 0 and 5"); }
方案2:转换成数字校验(更严谨,能防止非数字输入)
如果用户可能输入非数字内容,建议先把输入转成数字,同时校验是否为有效数字:
const validPowerValues = [0, 1, 2, 3, 4, 5]; let powertoset = Number(args[1]); // 先判断是不是有效数字,再检查是否在允许范围内 if (isNaN(powertoset) || !validPowerValues.includes(powertoset)) { return message.reply("Invalid number - please enter a number between 0 and 5"); }
为什么这个方法可行?
数组的includes()方法会遍历数组,严格匹配传入的值,刚好满足你“判断输入是否是0-5其中一个”的需求,逻辑清晰还不容易出错。
内容的提问来源于stack exchange,提问作者Dystopia
相关产品推荐
相关产品推荐

