Регулярные выражения Javascript - замена нецифровых символов - PullRequest
60 голосов
/ 31 марта 2010

Это работает:

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

Этот простой фрагмент заменит все, что не является числом, ничем.

Но десятичные числа тоже реальны. Итак, я пытаюсь выяснить, как включить точку.

Я уверен, что это действительно просто, но мои тесты не работают.

Ответы [ 10 ]

86 голосов
/ 31 марта 2010

Ты избежал периода? var.replace(/[^0-9\.]+/g, '');

8 голосов
/ 31 марта 2010

Замена того, что не является числом, немного сложнее, чем замена чего-то, что является числом.

Те, кто предлагает просто добавить точку, игнорируют тот факт, что. также используется как точка, поэтому:

This is a test. 0.9, 1, 2, 3 станет .0.9123.

Конкретное регулярное выражение в вашей задаче будет во многом зависеть от цели. Если в вашей строке только один номер, вы можете сделать это:

var.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1")

Находит первое число и заменяет всю строку на совпадающее число.

5 голосов
/ 31 марта 2010

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

var.replace(/[^0-9\\.]+/g, '');
2 голосов
/ 31 марта 2010

Если вы не хотите перехватывать IP-адрес вместе с десятичными знаками:

var.replace(/[^0-9]+\\.?[0-9]*/g, '');

Который будет ловить только цифры с одним или нулевым периодом

2 голосов
/ 31 марта 2010

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

var.replace(/[0-9]*\.?[0-9]+/g, '');

Соответствует только действительным десятичным знакам (например, «1», «1.0», «.5», но не «1.0.22»)

1 голос
/ 15 марта 2016

уже есть много правильных ответов, просто указываю, что вам, возможно, придется учитывать и отрицательные знаки. "\-" добавьте это к любому существующему ответу, чтобы учесть отрицательные числа.

0 голосов
/ 08 июня 2018

Этот только что работал для -ve до + ve чисел

<input type="text" oninput="this.value = this.value.replace(/[^0-9\-]+/g, '').replace(/(\..*)\./g, '$1');">
0 голосов
/ 23 августа 2016

Вот пара типов входных классов jQuery, которые я использую:

$("input.intgr").keyup(function (e) { // Filter non-digits from input value.
    if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, ''));
});
$("input.nmbr").keyup(function (e) { // Filter non-numeric from input value.
    var tVal=$(this).val();
    if (tVal!="" && isNaN(tVal)){
        tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, ''));
        var raVal=tVal.split(".")
        if(raVal.length>2)
            tVal=raVal[0]+"."+raVal.slice(1).join("");
        $(this).val(tVal);
    } 
});

intgr допускает только числовые - как и другие решения здесь.

nmbr допускает только положительное / отрицательное десятичное число. Отрицательный знак должен быть первым символом (вы можете добавить «+» к фильтру, если вам это нужно), полоски -3.6.23.333 до -3.623333

Я ставлю nmbr , потому что мне надоело искать способ сохранить только 1 десятичную и отрицательную в 1-й позиции

0 голосов
/ 15 февраля 2013

Сладкая и короткая встроенная замена нецифровых символов в текстовом поле ASP.Net:

 <asp:TextBox ID="txtJobNo" runat="server" class="TextBoxStyle" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" />

Измените часть регулярного выражения, как хотите. Многие люди жалуются на то, что при использовании клавиш со стрелками курсор идет прямо в конец, но люди склонны иметь дело с этим, не замечая этого, например, стрелка ... стрелка ... стрелка ... ладно тогда ... Backspace Back Space, введите новые символы.

0 голосов
/ 31 марта 2010

Как насчет этого:

var numbers = str.gsub(/[0-9]*\.?[0-9]+/, "#{0} ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...