Regex pour tout remplacer sauf les nombres et un point décimal

113

J'ai un champ de texte qui ne doit rester que du texte ou des nombres décimaux. Voici le code que j'utilise actuellement pour tout remplacer, sauf les nombres et un point décimal. Le problème est que je ne peux pas trouver une regex qui identifiera tout le reste

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

Le \ D fonctionne bien, mais j'ai essayé (?!.), (?!\.), [^.], [^\.]et ainsi de suite ...

Des suggestions pour une expression régulière qui s'identifie positivement avec autre chose qu'un nombre ou une décimale?

Merci pour l'aide

guildesbounty
la source
au cas où vous cherchez à vérifier les nombres réels plutôt que les chiffres numériques: stackoverflow.com/questions/42328875
...

Réponses:

239

Utilisez ceci:

document.getElementById(target).value = newVal.replace(/[^0-9.]/g, "");
Chandu
la source
1
@Hugo cela ne permet rien, vous ne devez tout simplement pas passer une chaîne qui pourrait potentiellement contenir plus de décimales et la pré-traiter en premier. C'est comme dire que la chaîne autorise tous les caractères ...
jave.web
3
Exécutez ensuite la valeur renvoyée via parseFloat. Cela supprimera les points décimaux supplémentaires. par exempleparseFloat("46554.4655465.54654.545345.5") = 46554.4655465
Simon
1
C'est génial pour convertir des nombres déjà formatés comme de l'argent en un flottant calculable.
lu1s
8

La suppression uniquement de la partie décimale peut être effectuée comme suit:

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

Cela convertirait 13,6667px en 13px (laissant les unités px intactes).

Lubosdz
la source
7

Essaye ça:

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

Maison de plage
la source
2
meilleure réponse. Supprime 0,000 10,000000 0,22 2,234, mais conserve 1, 10, 10,1, 10,22
Robert Baker
Cette expression semble compliquée, pouvez-vous expliquer comment cela fonctionne ou ce que cela supprimerait exactement?
Minderov le
Cela ne fonctionne pas avec une entrée cyrillique telle que «5.12 руб».
Minderov le
4
"11111" .replace (/ ^ \ d + (\. \ D {0,2})? $ /, "") - résultat chaîne vide
yAnTar