【问题标题】:Function to extract numbers only from a string仅从字符串中提取数字的函数
【发布时间】:2016-12-13 10:01:50
【问题描述】:
我编写了一个函数,我想接收一个字符串,然后返回一个只包含原始字符串中的数字字符的字符串。它
function pureNumbers() {
var result;
for (var i = 0; i < phoneNumber.length; i++) {
if (Number(phoneNumber[i]) !== NaN) {
result ? result = result + phoneNumber[i] : result = phoneNumber[i]
}
}
return result;
}
pureNumbers('(123) 456-7890')
想要的结果:
result: '1234567890'
我实际得到的是:
result: 'undefined(123) 456-7890'
我知道这里有两个问题(可能更多)。
-
result 开头的undefined 是因为我的函数试图在第一个循环的迭代中返回结果的值,然后再分配给它。我设置了三元条件来解决这个问题,不知道为什么它不起作用......
- 我的第一个
if() 条件旨在使字符串的给定字符添加到result 仅如果它是一个数字,但每个字符正在添加中。
任何帮助表示赞赏 - 在此先感谢。
【问题讨论】:
标签:
javascript
if-statement
for-loop
nan
ternary-operator
【解决方案1】:
我只是稍微改变了你的函数,虽然它可以通过多种方式解决,尤其是使用正则表达式。
function pureNumbers(phoneNumber) {
var result = "";
for (var i = 0; i < phoneNumber.length; i++) {
if (!isNaN(phoneNumber[i]) && phoneNumber[i].trim() !== '') {
result += phoneNumber[i];
}
}
return result;
}
希望您能得到一些提示并改进以获得更好的解决方案。
【解决方案2】:
您还可以尝试以下操作:string.replace(/[^0-9]/g, ''); OR string.replace(/\D/g,''); 去除所有非数字字符。
function pureNumbers(str) {
var num = str.replace(/[^0-9]/g, '');
return num;
}
alert(pureNumbers('(123) 456-7890'));
【解决方案3】:
基本逻辑如下:
var x = 'Hello please call (727) 902-1112';
var numbers = x.match(/[0-9]/g).join('');
console.log(numbers);
结果:7279021112
现在关于一个函数,我认为这可能会对你有所帮助:
var x = 'Hello please call';
var y = 'Hello please call (727) 902-1112';
function pureNumbers(param) {
result = param.match(/[0-9]/g);
if (Array.isArray(result)) {
return result.join('');
}
return false;
}
console.log(pureNumbers(x)); // returns false
console.log(pureNumbers(y)); // returns 7279021112
注意:isArray() 在旧版本的 IE 9 中不起作用。您必须这样做 differently。
【解决方案4】:
这会将字符串中的所有数字作为数组获取,然后 .join("") 将字符串连接在一起,它们之间没有分隔符,即数字匹配的连续串联字符串。
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern ).join("");
产生“1021948948”