Регулярное выражение для замены всего, кроме чисел и десятичной точки

113

У меня есть текстовое поле, которое должно оставаться только текстовым или десятичным. Вот код, который я сейчас использую для замены всего, кроме чисел и десятичной точки. Проблема в том, что я не могу понять регулярное выражение, которое идентифицирует все остальное.

document.getElementById(target).value = newVal.replace(/\D[^\.]/g, "");

\ D работает нормально, но я пробовал (?!.), (?!\.), [^.], [^\.]и так далее ...

Есть ли предложения по регулярному выражению, которое положительно идентифицирует с чем-либо, кроме числа или десятичной дроби?

Спасибо за помощь

гильдия
источник
если вы хотите проверить фактические числа, а не числовые цифры: stackoverflow.com/questions/42328875/…
cregox

Ответы:

239

Использовать это:

document.getElementById(target).value = newVal.replace(/[^0-9.]/g, "");
Chandu
источник
1
@Hugo это ничего не позволяет, вам просто не следует передавать строку, которая потенциально может содержать больше десятичных знаков, и предварительно ее обработать. Это все равно что сказать, что строка допускает каждый символ ...
jave.web 03
3
Затем прогоните возвращаемое значение через parseFloat. Это удалит дополнительные десятичные точки. напримерparseFloat("46554.4655465.54654.545345.5") = 46554.4655465
Саймон
1
Это замечательно для преобразования уже отформатированных чисел, таких как деньги, в вычислимое число с плавающей запятой.
lu1s
8

Удалить только десятичную часть можно следующим образом:

number.replace(/(\.\d+)+/,'');

Это преобразует 13,6667 пикселей в 13 пикселей (без изменения единиц пикселей).

Любосдз
источник
7

Попробуй это:

document.getElementById(target).value = newVal.replace(/^\d+(\.\d{0,2})?$/, "");

Домик на пляже
источник
2
лучший ответ. Удаляет 0,000 10,000000 .22 2,234, но сохраняет 1, 10, 10,1, 10,22
Роберт Бейкер
Это выражение выглядит сложным, не могли бы вы объяснить, как оно работает или что именно оно удалит?
Миндеров
Это не работает с вводом кириллицы, например "5,12 руб."
Миндеров
4
"11111" .replace (/ ^ \ d + (\. \ D {0,2})? $ /, "") - результат пустая строка
yAnTar 07