如何编写接收string类型参数val、提取数字返回number的JS函数
JS提取字符串中数字的实现方案
原有实现问题
当前写法存在几个核心问题,无法匹配预期结果:
- 正则
/[^\d]+/g会把小数点.也作为非法字符过滤,导致带小数的输入无法正确解析 - 直接返回字符串替换结果,没有做Number类型转换
- 没有处理无有效数字的场景,全非数字输入无法返回预期的
NaN
符合预期的实现代码
实现逻辑:先过滤掉所有非数字、非小数点的字符(逗号、字母等都会被直接移除,匹配n1,5 => 15的要求),再判断是否存在有效数字片段,最后转成数字返回即可。
function extractNumber(val) { // 移除所有数字、小数点之外的字符 const validNumStr = val.replace(/[^\d.]/g, ''); // 无有效数字片段直接返回NaN if (!validNumStr) { return NaN; } // 转为数字类型返回 return Number(validNumStr); }
结果验证
对应给出的预期用例,运行结果完全匹配:
- 输入
'oo':过滤后为空字符串,返回NaN - 输入
'57o':过滤后为'57',返回57 - 输入
'n1.5':过滤后为'1.5',返回1.5 - 输入
'n1,5':逗号被过滤,剩余'15',返回15
补充说明:如果输入存在多个小数点(比如
'1.2.3'),Number转换会自动返回NaN,符合非法数字格式的处理逻辑。
内容的提问来源于stack exchange,提问作者AnonimousDev123
相关产品推荐
相关产品推荐

