Regex para substituir tudo, exceto números e um ponto decimal


113

Eu tenho um campo de texto que precisa permanecer apenas texto ou decimal. Aqui está o código que estou usando atualmente para substituir tudo, exceto números e um ponto decimal. O problema é que não consigo descobrir uma regex que identifique todo o resto

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

O \ D funciona bem, mas eu tentei (?!.), (?!\.), [^.], [^\.]e assim por diante ...

Alguma sugestão para uma expressão regular que se identifica positivamente com qualquer coisa, exceto um número ou um decimal?

Obrigado pela ajuda


caso você esteja procurando por números reais em vez de dígitos numéricos: stackoverflow.com/questions/42328875/…
cregox

Respostas:


239

Usa isto:

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

1
@Hugo isso não permite nada, você apenas não deve passar uma string que poderia conter mais pontos decimais e pré-processá-la primeiro. É como dizer que string permite todos os caracteres ...
jave.web

3
Em seguida, execute o valor retornado por meio de parseFloat. Isso removerá pontos decimais adicionais. por exemploparseFloat("46554.4655465.54654.545345.5") = 46554.4655465
Simon

1
Isso é ótimo para converter números já formatados, como dinheiro, em um número flutuante computável.
lu1s

8

A remoção apenas da parte decimal pode ser feita da seguinte forma:

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

Isso converteria 13,6667 px em 13 px (deixando as unidades px intactas).


7

Experimente isto:

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


2
melhor resposta. Remove 0,000 10.000000 0,22 2,234, mas mantém 1, 10, 10,1, 10,22
Robert Baker,

Esta expressão parece complicada. Você poderia explicar como funciona ou o que exatamente ela removeria?
Minderov

Isso não funciona com entrada cirílica, como "5,12 руб."
Minderov

4
"11111" .replace (/ ^ \ d + (\. \ D {0,2})? $ /, "") - string vazia do resultado
yAnTar

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.