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

guildsbounty
fonte
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, "");
Chandu
fonte
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).

Lubosdz
fonte
7

Experimente isto:

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

Beachhouse
fonte
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