如何在JavaScript中实现让10.0返回false的整数校验函数?
如何修改整数校验函数使10.0返回false?
需求是编写一个校验函数,判断输入值是否符合自定义整数规则(仅接受正整数,无论是数字类型还是字符串类型,且像10.0这类带小数点的数值要返回false),期望的调用结果如下:
validInteger('10') // should return true validInteger(10) // should return true validInteger('-10') // should return false validInteger(-10) // should return false validInteger(0.0) // should return false validInteger(10.0) // should return false validInteger(-10.0) // should return false
当前代码的问题在于:JavaScript中10.0会被Number.isInteger识别为整数,且String(10.0)会被转换为"10",和String(10)相等,导致10.0返回true,不符合预期。
修改后的代码方案
核心思路是校验原始输入的格式和类型,而不是仅依赖转换后的数值:
function validInteger(value) { // 处理数字类型输入 if (typeof value === 'number') { // 必须是正整数,且原始数值的字符串形式不含小数点 return Number.isInteger(value) && value > 0 && !String(value).includes('.'); } // 处理字符串类型输入 if (typeof value === 'string') { // 正则匹配纯数字字符串(无负号、无小数点),同时确保转换后是正整数 const num = Number(value); return /^\d+$/.test(value) && Number.isInteger(num) && num > 0; } // 非字符串/数字类型直接返回false return false; }
验证测试用例
validInteger('10')→true(符合纯数字字符串+正整数)validInteger(10)→true(数字类型正整数,无小数点)validInteger('-10')→false(字符串带负号,不匹配正则)validInteger(-10)→false(数字为负数)validInteger(0.0)→false(数字字符串含小数点,且数值为0)validInteger(10.0)→false(数字字符串含小数点)validInteger(-10.0)→false(数字为负数且含小数点)
关键逻辑说明
- 对于数字类型:额外检查
String(value).includes('.'),确保原始数值的字符串形式没有小数点,这样就能区分10和10.0。 - 对于字符串类型:用正则
/^\d+$/严格匹配纯数字字符串,排除带负号、小数点的情况,再验证转换后的数值是正整数。
内容的提问来源于stack exchange,提问作者Lolipop
相关产品推荐
相关产品推荐

