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

请求修正JavaScript数字统计函数:仅统计字符串内数字字符

问题排查与修正

原代码的核心问题

  1. 遍历逻辑完全错误:用for...in遍历字符串时,循环变量number拿到的是字符串的索引(字符串类型,比如"0"、"1"),不是字符本身。
  2. 判断条件失效:typeof number.length === 'number'这个判断毫无意义——所有字符串(包括索引字符串)都有length属性,类型必然是number,所以条件永远为true,导致统计所有字符的数量,完全没区分数字。
  3. 参数处理不严谨:部分非字符串输入返回0只是巧合,没有主动做类型校验。

修正后的代码方案

下面是两种可靠的实现方式,都能准确统计字符串中的数字字符数量:

方案一:传统循环遍历+字符判断

function countNumbers(input) {
  // 先处理非字符串输入的边界情况
  if (typeof input !== 'string') {
    return 0;
  }

  let count = 0;
  // 用普通for循环遍历每个字符
  for (let i = 0; i < input.length; i++) {
    const char = input[i];
    // 判断字符是否为0-9的数字
    if (char >= '0' && char <= '9') {
      count++;
    }
  }
  return count;
}

方案二:正则表达式(更简洁)

function countNumbers(input) {
  if (typeof input !== 'string') {
    return 0;
  }
  // 匹配所有数字字符,返回匹配结果的长度(无匹配则返回0)
  const matches = input.match(/\d/g);
  return matches ? matches.length : 0;
}

测试验证

运行你提供的测试用例,结果都会符合预期:

console.log(countNumbers('asas124')); // 3
console.log(countNumbers('10')); // 2
console.log(countNumbers('asasas')); // 0
console.log(countNumbers('!@#34!@@@')); // 2
console.log(countNumbers('')); // 0
console.log(countNumbers()); // 0
console.log(countNumbers(45)); // 0
console.log(countNumbers([])); // 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:57:13