Убрать все нечисловые символы из строки в 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