Regex per sostituire tutto tranne i numeri e un punto decimale


113

Ho un campo di testo che deve rimanere solo testo o decimale. Ecco il codice che sto attualmente utilizzando per sostituire tutto tranne i numeri e un punto decimale. Il problema è che non riesco a trovare una regex che identifichi tutto il resto

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

\ D funziona bene, ma ci ho provato (?!.), (?!\.), [^.], [^\.]e così via ...

Qualche suggerimento per un'espressione regolare che si identifichi positivamente con qualsiasi cosa tranne un numero o un decimale?

Grazie per l'aiuto


nel caso in cui si sta cercando di verificare la presenza di numeri reali, piuttosto che le cifre numeriche: stackoverflow.com/questions/42328875/...
cregox

Risposte:


239

Usa questo:

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

1
@ Hugo questo non consente nulla, semplicemente non dovresti passare una stringa che potrebbe potenzialmente contenere più punti decimali e pre-elaborarla prima. È come dire che la stringa consente ogni carattere ...
jave.web

3
Quindi eseguire il valore restituito tramite parseFloat. Ciò rimuoverà i punti decimali aggiuntivi. ad esempioparseFloat("46554.4655465.54654.545345.5") = 46554.4655465
Simon

1
Questo è ottimo per convertire numeri già formattati come denaro in un float calcolabile.
lu1s

8

La rimozione della sola parte decimale può essere eseguita come segue:

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

Questo convertirà 13,6667px in 13px (lasciando le unità px intatte).


7

Prova questo:

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


2
migliore risposta. Rimuove 0.000 10.000000 .22 2.234, ma mantiene 1, 10, 10.1, 10.22
Robert Baker

Questa espressione sembra complicata, potresti spiegare come funziona o cosa rimuoverebbe esattamente?
Minderov

Questo non funziona con input in cirillico come "5,12 руб".
Minderov

4
"11111" .replace (/ ^ \ d + (\. \ D {0,2})? $ /, "") - stringa vuota del risultato
yAnTar

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.