2016-08-07 44 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; 
} 

希望你可以得到一些提示和改進,以獲得更好的解決方案。