10

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

8

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

Вот пример строки, с которой я работаю:

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

Я хотел бы получить на выходе: 1238.

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

5 ответ(ов)

4

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

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // возвращает "-12345.50"

Этот код удаляет все символы, кроме цифр, точки и знака минус.

0

Вы можете использовать метод replace, чтобы удалить все символы, кроме цифр, из строки. Вот пример кода на JavaScript:

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

В этом коде регулярное выражение /[^0-9]/g ищет все символы, которые не являются цифрами (от 0 до 9), и заменяет их на пустую строку. Флаг g означает, что замена будет произведена глобально, то есть для всех вхождений в строке. Таким образом, в результате вы получите строку, содержащую только цифры.

0

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

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

Этот код заменит все символы, кроме цифр, на пустую строку, effectively оставляя только числа в строке myString.

0

Вы можете использовать следующую короткую функцию, чтобы удалить все нечисловые символы, но сохранить десятичную точку и вернуть число:

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

В этой функции мы применяем регулярное выражение [^.\d], которое находит все символы, кроме цифр и десятичной точки, и заменяем их на пустую строку. Затем мы используем оператор + для преобразования полученной строки в число. В результате, для заданной строки 'a1b2c.d3e', функция вернет 12.3.

0

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

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

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

Эта регулярка позволит сохранить как целые числа, так и числа с плавающей запятой. Обратите внимание, что это решение не учитывает ситуацию, когда в строке могут встречаться несколько десятичных точек. Если это проблема, то вам следует дополнительно обработать такую ситуацию, например, оставляя только первую точку.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь