Regex, um alles außer Zahlen und einem Dezimalpunkt zu ersetzen

113

Ich habe ein Textfeld, das nur Text oder Dezimalzahl bleiben muss. Hier ist der Code, den ich derzeit verwende, um alles außer Zahlen und einem Dezimalpunkt zu ersetzen. Das Problem ist, ich kann keinen regulären Ausdruck finden, der alles andere identifiziert

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

Das \ D funktioniert gut, aber ich habe es versucht (?!.), (?!\.), [^.], [^\.]und so weiter ...

Irgendwelche Vorschläge für einen regulären Ausdruck, der sich positiv mit etwas anderem als einer Zahl oder einer Dezimalstelle identifiziert?

Danke für die Hilfe

Gildenprämie
quelle
für den Fall, dass Sie nach tatsächlichen Zahlen anstatt nach numerischen Ziffern suchen
möchten

Antworten:

238

Benutze das:

document.getElementById(target).value = newVal.replace(/[^0-9.]/g, "");
Chandu
quelle
1
@Hugo dies erlaubt nichts, Sie sollten einfach keine Zeichenfolge übergeben, die möglicherweise mehr Dezimalstellen enthalten könnte, und diese zuerst vorverarbeiten. Es ist, als würde man sagen, dass eine Zeichenfolge jedes Zeichen zulässt ...
jave.web
3
Führen Sie dann den zurückgegebenen Wert über parseFloat aus. Dadurch werden zusätzliche Dezimalstellen entfernt. zBparseFloat("46554.4655465.54654.545345.5") = 46554.4655465
Simon
1
Dies ist großartig, um bereits formatierte Zahlen wie Geld in einen berechenbaren Float umzuwandeln.
lu1s
8

Das Entfernen nur des Dezimalteils kann wie folgt erfolgen:

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

Dies würde 13.6667px in 13px umwandeln (Einheiten px bleiben unberührt).

lubosdz
quelle
7

Versuche dies:

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

Strandhaus
quelle
2
beste Antwort. Entfernt 0,000 10.000000 .22 2.234, behält aber 1, 10, 10.1, 10.22
Robert Baker
Dieser Ausdruck sieht kompliziert aus. Können Sie erklären, wie er funktioniert oder was genau er entfernen würde?
Minderov
Dies funktioniert nicht mit kyrillischen Eingaben wie "5.12 руб".
Minderov
4
"11111" .replace (/ ^ \ d + (\. \ D {0,2})? $ /, "") - Ergebnis leere Zeichenfolge
yAnTar
0

Überprüfen Sie den Link Regular Expression Demo

Verwenden Sie die unten stehende reg exp

[az] + [^ 0-9 \ s.] + |. (?! \ d)

Divya
quelle