【问题标题】: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'

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

  1. result 开头的undefined 是因为我的函数试图在第一个循环的迭代中返回结果的值,然后再分配给它。我设置了三元条件来解决这个问题,不知道为什么它不起作用......
  2. 我的第一个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”

          【讨论】:

            猜你喜欢
            • 2021-07-18
            • 2021-11-14
            • 2019-09-14
            • 2015-10-04
            • 2021-01-08
            • 2021-07-28
            • 2012-06-15
            • 2019-09-26
            • 1970-01-01
            相关资源
            最近更新 更多