Rimuovi tutti i caratteri non numerici dalla stringa in JavaScript


701

Prendi in considerazione uno scenario non DOM in cui desideri rimuovere tutti i caratteri non numerici da una stringa utilizzando JavaScript / ECMAScript. Tutti i personaggi che si trovano nel raggio di azione 0 - 9devono essere mantenuti.

var myString = 'abc123.8<blah>';

//desired output is 1238

Come lo raggiungeresti in JavaScript? Ricorda che questo è uno scenario non DOM, quindi jQuery e altre soluzioni che coinvolgono eventi del browser e dei tasti premuti non sono adatti.

Risposte:


1431

Usa il .replacemetodo della stringa con una regex di \D, che è una classe di caratteri abbreviati che corrisponde a tutte le non cifre:

myString = myString.replace(/\D/g,'');

5
Grazie CSJ; ovunque per trovare maggiori informazioni su \D?
p

34
Questo è il mio riferimento regex predefinito: regular-expressions.info/reference.html Le classi di caratteri incorporate hanno ciascuna complementi integrati. \ d \ D (cifre contro qualsiasi cosa tranne le cifre) \ w \ W (caratteri di parole contro tutto tranne i caratteri di parola) \ s \ S (spazi bianchi contro qualsiasi cosa tranne gli spazi bianchi)
CSJ

3
Giusto per essere chiari, ecco la sintassi per sostituire: w3schools.com/jsref/jsref_obj_regexp.asp perché le barre in avanti e la "g" fanno parte di quel comando, non parte del RegEx.
Mike K,

fa replacelavoro con questa sintassi esatta in tutti i browser? mi sembra di ricordare di averne inserito uno object has no method 'replace' in una versione precedente di IE quando l'ho usato con il testo che ho preso con jQuery ... o qualcosa del genere.
Cwd

@cwd Non ho idea di cosa sia stato supportato nei browser passati o attuali. La domanda specificava un contesto non DOM, quindi è probabile che il poster stesse eseguendo script in un ambiente non web browser.
CSJ,

354

Se hai bisogno di questo per lasciare il punto per i numeri float, usa questo

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"

6
Qualche esperto di regexp? Come fare questo consentire solo un singolo punto (molto rilevante con i numeri). Grazie!
Kasperi,

1
cosa intendi? dare un esempio di input e output
max4ever,

2
Non va bene: "aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.Dovrebbe
rimuovere

2
@ max4ever mi hai salvato la vita, grazie per aver gestito il caso -(negativo) :)
Pankaj Parkar

4
@Kasperi forse:parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
A. Genedy,


23

È possibile utilizzare un RegExp per sostituire tutti i caratteri non numerici:

var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238

22

Qualcosa sulla falsariga di:

yourString = yourString.replace ( /[^0-9]/g, '' );

10
Non esattamente una risposta alla domanda originale, ma una versione per gestire il punto decimale:yourString = yourString.replace ( /[^0-9.]/g, '' );
Maxim Mai


0

In Angular / Ionic / VueJS - Ho appena escogitato un semplice metodo di:

stripNaN(txt: any) {
    return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}

Utilizzo nella vista:

<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>

0

Purtroppo nessuna delle risposte sopra ha funzionato per me.

Stavo cercando di convertire i numeri di valuta da stringhe come $123,232,122.11(1232332122.11) o USD 123,122.892(123122.892) o qualsiasi valuta come ₹ 98,79,112.50(9879112.5) per darmi un output numerico incluso il puntatore decimale.

Ho dovuto creare la mia regex che assomiglia a questa:

str = str.match(/\d|\./g).join('');

0

Funzione breve per rimuovere tutti i caratteri non numerici ma mantenere il decimale (e restituire il numero):

parseNum = str => +str.replace(/[^.\d]/g, '');
let str = 'a1b2c.d3e';
console.log(parseNum(str));


-5

siamo nel 2017 ora puoi anche usare ES2016

var a = 'abc123.8<blah>';
console.log([...a].filter( e => isFinite(e)).join(''));

o

console.log([...'abc123.8<blah>'].filter( e => isFinite(e)).join(''));  

Il risultato è

1238

12
Questo è un modo molto inefficiente per eseguire questa operazione.
djheru,

cosa c'è di inefficiente o cattivo qui?
Vladislav Kostenko,

5
Converte la stringa in una matrice di stringhe a carattere singolo tramite un metodo di riserva, quindi applica la funzione di filtro su JavaScript su ciascun elemento della matrice, restituendo una nuova matrice di stringhe, per unire nuovamente quella matrice in una stringa. Regex accetta una stringa e restituisce una stringa e l'elaborazione viene eseguita tramite codice nativo.
ShortFuse
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.