仅从字符串中提取数字的功能

时间:2016-08-07 15:04:20

标签: javascript if-statement for-loop nan ternary-operator

我编写了一个函数,我想要一个字符串,然后返回一个只包含原始字符串中的数字字符的字符串。它

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 ,如果它是数字,但是每个角色都被添加了。
  3. 任何帮助表示感谢 - 提前感谢。

4 个答案:

答案 0 :(得分:1)

这将字符串中的所有数字作为数组,然后.join(&#34;&#34;)将字符串连接在一起,它们之间没有分隔符,即连续的数字匹配串联字符串。< / p>

var numberPattern = /\d+/g;

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

收益率&#34; 1021948948&#34;

答案 1 :(得分: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

答案 2 :(得分: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'));

答案 3 :(得分: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;
}

希望您可以获得一些提示并改进以获得更好的解决方案。