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

Надеюсь, вы можете получить какой-то намек и улучшить для лучшего решения.

Смежные вопросы