Убрать все нечисловые символы из строки в JavaScript

Рассмотрим сценарий без DOM, в котором вы хотите удалить все нечисловые символы из строки, используя JavaScript/ECMAScript. Любые символы в диапазоне от 0 до 9 должны быть сохранены.

var myString = 'abc123.8<blah>';

//desired output is 1238

Как бы вы достигли этого простым JavaScript? Пожалуйста, помните, что это сценарий не DOM, поэтому jQuery и другие решения, включающие события браузера и нажатия клавиш, не подходят.

13 ответов

Решение

Используйте строку .replace метод с регулярным выражением \D, который является сокращенным классом символов, который соответствует всем не цифрам:

myString = myString.replace(/\D/g,'');

Если вам нужно это оставить точку для чисел с плавающей запятой, используйте это

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"

Используйте регулярное выражение, если ваша реализация скрипта поддерживает их. Что-то вроде:

myString.replace(/[^0-9]/g, '');

Вы можете использовать RegExp для замены всех нецифровых символов:

var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238

Что-то вроде:

yourString = yourString.replace ( /[^0-9]/g, '' );

Короткая функция для удаления всех нечисловых символов, но с сохранением десятичной дроби (и возврата числа):

parseNum = str => +str.replace(/[^.\d]/g, '');
let str = 'a1b2c.d3e';
console.log(parseNum(str));

Проблема с этими ответами выше заключается в том, что они предполагают целые числа. Но если вам нужно значение с плавающей запятой, то предыдущая строка reg удалит десятичную точку.

Чтобы исправить это, вам нужно написать отрицательный класс символов с помощью ^

      var mystring = mystring.replace(/[^0-9.]/g, '');

В Angular / Ionic / VueJS - я просто придумал простой метод:

stripNaN(txt: any) {
    return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}

Использование в представлении:

<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>

К сожалению, ни один из приведенных выше ответов не помог мне.

Я хотел преобразовать числа валюты из строк вроде $123,232,122.11 (1232332122.11) или USD 123,122.892 (123122.892) или в любой другой валюте, например ₹ 98,79,112.50 (9879112.5), чтобы получить числовой вывод, включая десятичный указатель.

Пришлось создать собственное регулярное выражение, которое выглядит примерно так:

str = str.match(/\d|\./g).join('');

Пытаться

myString.match(/\d/g).join('')

var myString = 'abc123.8<blah>'
console.log( myString.match(/\d/g).join('') );

Этот,

      .match(/\d|\.|\-/g).join('');

Обрабатывает оба ,а также .также -

Пример:

"Balance -$100,00.50".match(/\d|\.|\-/g).join('');

Выходы

10000.50

      alpha_string  = "asifsaeed5595sjhsd999";

numeric = alpha_string.replace(/\D/g,'');

console.log(numeric);
 
// Desired Output: 5595999

Мы находимся в 2017 году, теперь вы также можете использовать ES2016

var a = 'abc123.8<blah>';
console.log([...a].filter( e => isFinite(e)).join(''));

или же

console.log([...'abc123.8<blah>'].filter( e => isFinite(e)).join(''));  

Результат

1238
Другие вопросы по тегам