2010-12-31 4 views
67

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

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

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

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

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

+0

в случае, если вы» re, чтобы проверить фактические цифры, а не числовые цифры: http://stackoverflow.com/questions/42328875/javascript-regex-to-remove-all-numbers-with-specific-lenght-or-do-a-persistent – cregox

ответ

145

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

document.getElementById(target).value = newVal.replace(/[^0-9.]/g, ""); 
+0

Спасибо, это работает. – guildsbounty

+1

@Hugo это ничего не позволяет, вы должны просто не передавать строку, которая потенциально может содержать больше десятичных точек и предварительно обрабатывать ее. Это похоже на то, что строка string позволяет каждому символу ... –

+2

Затем запустите возвращаемое значение через parseFloat. Это позволит удалить дополнительные десятичные точки. например 'parseFloat (" 46554.4655465.54654.545345.5 ") = 46554.4655465' – Simon

4

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

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

+2

лучший ответ. Удаляет 0.000 10.000000 .22 2.234, но сохраняет 1, 10, 10.1, 10.22 –

+0

Это выражение выглядит сложным, не могли бы вы объяснить, как он работает или что именно он удалит? – Minderov

+0

Это не работает с кириллическим вводом, например, «5.12 руб.». – Minderov

6

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

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

Это преобразует 13.6667px в 13px (оставив единицы px нетронутыми).

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