如何不使用isNaN判断字符串是否为1-99区间的非负有效数字
实现不使用isNaN判断合法数字字符串的方案
核心思路
先通过正则表达式验证字符串格式是否符合要求(无负号、合法的小数点/逗号位置、无多余字符),再将逗号替换为小数点转换为数值,最后判断数值是否在1-99的范围内。
代码实现
function isValidNumber(str) { // 正则匹配:整数部分1-99,可选一个小数点(.或,)后跟至少一位数字 const validFormatRegex = /^([1-9]|[1-9]\d)([.,]\d+)?$/; // 第一步:验证格式合法性 if (!validFormatRegex.test(str)) { return false; } // 第二步:将逗号替换为小数点,转换为数值 const numericValue = Number(str.replace(',', '.')); // 第三步:判断数值范围是否在1到99之间(包含边界) return numericValue >= 1 && numericValue <= 99; }
测试示例验证
// 测试给定示例 console.log(isValidNumber('--5')); // false(格式不符合,存在多余负号) console.log(isValidNumber('95.5')); // true(格式合法,数值在范围内) console.log(isValidNumber('99,8')); // false(数值99.8超出99上限) console.log(isValidNumber('99,')); // false(逗号后无数字,格式不合法) // 额外边界测试 console.log(isValidNumber('0')); // false(数值小于1) console.log(isValidNumber('99')); // true(刚好达到上限) console.log(isValidNumber('99.0')); // true(小数部分为0,数值仍为99) console.log(isValidNumber('1.000')); // true(合法格式且数值在范围内) console.log(isValidNumber(',5')); // false(无整数部分,格式不合法) console.log(isValidNumber('5..5')); // false(多个小数点,格式不合法) console.log(isValidNumber('-12')); // false(包含负号,不接受负数)
逻辑解释
- 格式验证:正则表达式
^([1-9]|[1-9]\d)([.,]\d+)?$确保:- 整数部分只能是1-99(无前置0,排除0开头的无效数字)
- 允许出现一次小数点(.或,),但小数点后必须至少跟一位数字(避免
99,这类无效格式) - 字符串中不能包含负号、字母或其他非数字字符
- 数值转换:将逗号替换为小数点后转成Number,由于已经通过正则验证格式,转换过程不会产生NaN,无需额外判断
- 范围判断:直接比较数值是否在1到99的闭区间内,符合要求则返回true,否则返回false
内容的提问来源于stack exchange,提问作者baranja
相关产品推荐
相关产品推荐

