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

如何在Javascript中过滤出全数字串及匹配指定模式的数字类字符串

问题原因

你原有代码中的el==+el逻辑会将包含-的字符串转为NaN,直接过滤掉了第二类合法元素,这是输出结果不符合预期的核心原因。

满足当前需求的解决方案

直接调整正则逻辑,移除多余的数字转换校验即可:

const arr = ["ab's-test#s", "ab-c", "124", "123-12345"];
// 正则同时匹配全数字、xxx-xxxxx两种格式
const validReg = /^(?:\d+|\d{3}-\d{5})$/;
const arr2 = arr.filter(el => el.length && validReg.test(el));
console.log(arr2) // 输出 ["124", "123-12345"]

正则说明

  • ^和$限定字符串整体匹配,避免部分匹配的脏数据
  • 非捕获组(?:)内的|分隔两类合法规则:
    • \d+匹配任意长度的全数字字符串
    • \d{3}-\d{5}匹配xxx-xxxxx格式的字符串

支持后续扩展的优化方案

如果后续需要新增更多合法格式,建议把所有格式规则单独维护,动态拼接正则,新增规则无需修改过滤逻辑:

const arr = ["ab's-test#s", "ab-c", "124", "123-12345", "12-12345", "1-23-456"];
// 所有合法格式的正则片段,新增规则直接往数组加即可
const validRules = [
  '\\d+', // 全数字
  '\\d{3}-\\d{5}', // xxx-xxxxx
  '\\d{2}-\\d{5}', // 新增格式:xx-xxxxx
  '\\d-\\d{2}-\\d{3}' // 新增格式:x-xx-xxx
];
// 动态生成完整匹配正则
const combinedReg = new RegExp(`^(?:${validRules.join('|')})$`);
const arr2 = arr.filter(el => el.length && combinedReg.test(el));
console.log(arr2) // 输出 ["124", "123-12345", "12-12345", "1-23-456"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:05