2016-08-07 42 views
0

我已经写了一个函数,我想要在一个字符串中取出一个字符串,然后返回一个只包含原始字符串中的数字字符的字符串。它只能从字符串中提取数字的函数

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' 

我知道这里有两个问题(可能更多)。

  1. undefined之初我result是因为我的函数试图返回结果的值在第一循环的迭代中,任何事情之前已经被分配给它。我成立了三元条件来覆盖这一点,不知道为什么它不工作...
  2. 我的第一个if()条件的目的是使该字符串的给定的字符被添加到result只有如果它是一个 ,但每一个字符都被添加。

任何帮助表示赞赏 - 在此先感谢。

回答

1

这将获取字符串中的所有数字作为数组,然后使用.join(“”)将它们之间没有分隔符的字符串连接在一起,即连续的数字匹配字符串。

var numberPattern = /\d+/g; 

'something102asdfkj1948948'.match(numberPattern).join(""); 

息率 “1021948948”

0

的基本逻辑如下:

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

0

你也可以尝试以下方法:string.replace(/[^0-9]/g, '');string.replace(/\D/g,'');剥离所有非数字字符。

function pureNumbers(str) { 
    var num = str.replace(/[^0-9]/g, ''); 
    return num; 
} 

alert(pureNumbers('(123) 456-7890')); 
0

我只是稍微改变了你的函数,尽管它可以通过很多方式解决,特别是使用正则表达式。

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; 
} 

希望你可以得到一些提示和改进,以获得更好的解决方案。