Tira todos os caracteres não numéricos da string em JavaScript


701

Considere um cenário não DOM, no qual você deseja remover todos os caracteres não numéricos de uma sequência usando JavaScript / ECMAScript. Quaisquer caracteres que estejam dentro do alcance 0 - 9devem ser mantidos.

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

//desired output is 1238

Como você conseguiria isso em JavaScript simples? Lembre-se de que este é um cenário que não é do DOM; portanto, o jQuery e outras soluções que envolvem eventos do navegador e do pressionamento de tecla não são adequados.

Respostas:


1431

Use o .replacemétodo da string com um regex de \D, que é uma classe de caracteres abreviados que corresponde a todos os que não são dígitos:

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

5
Obrigado csj; em qualquer lugar para encontrar mais informações \D?
P.campbell 07/12/2009

34
Esta é minha referência de regex padrão: regular-expressions.info/reference.html As classes de caracteres internas possuem complementos internos. \ d \ D (dígitos contra tudo, mas dígitos) (charcters palavra contra tudo mas palavra caracteres) \ w \ W \ s \ S (espaços em branco contra tudo, mas os espaços em branco)
csj

3
Só para esclarecer, eis a sintaxe para substituir: w3schools.com/jsref/jsref_obj_regexp.asp porque as barras e o "g" fazem parte desse comando, não fazem parte do RegEx.
Mike K

faz replacetrabalho com esta sintaxe exata em todos os navegadores? parece que me lembro de ter conseguido uma object has no method 'replace' versão mais antiga do IE ao usá-la com o texto que peguei no jQuery ... ou algo assim.
Cwd

@cwd Não tenho idéia do que é suportado em navegadores anteriores ou atuais. A pergunta especificou um contexto não DOM, portanto, é provável que o pôster estivesse em script em um ambiente que não seja um navegador da Web.
Csj

354

Se você precisar deixar o ponto para números flutuantes, use este

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

6
Algum especialista em regexp? Como fazer isso permitir apenas um único ponto (muito relevante com números). Obrigado!
Kasperi

1
O que você quer dizer? dar exemplo de entrada e saída
max4ever 23/10

2
Não é bom: "aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.Deve remover qualquer String que possa envolver um número ..
vsync

2
@ max4ever você salvou minha vida, obrigado por manipulação -(negativo) caso o número :)
Pankaj Parkar

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


23

Você pode usar um RegExp para substituir todos os caracteres que não são dígitos:

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

22

Algo ao longo das linhas de:

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

10
Não é exatamente uma resposta para a pergunta original, mas uma versão para manipular o ponto decimal:yourString = yourString.replace ( /[^0-9.]/g, '' );
Maxim Mai


0

Em Angular / Ionic / VueJS - acabei de criar um método simples de:

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

Uso na exibição:

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

0

Infelizmente, nenhuma das respostas acima funcionou para mim.

Eu estava olhando para converter números de moeda de seqüências de caracteres como $123,232,122.11(1232332122.11) ou USD 123,122.892(123122.892) ou qualquer moeda como ₹ 98,79,112.50(9879112.5) para me dar uma saída de número, incluindo o ponteiro decimal.

Tive que fazer meu próprio regex que se parece com isso:

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

0

Função curta para remover todos os caracteres não numéricos, mas manter o decimal (e retornar o número):

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


-5

estamos em 2017 agora você também pode usar o ES2016

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

ou

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

O resultado é

1238

12
Esta é uma maneira muito ineficiente de executar esta operação.
djheru

o que é ineficiente ou ruim aqui?
Vladislav Kostenko 14/11

5
Ele converte a cadeia de caracteres em uma matriz de cadeias de caracteres únicos por meio de um método sobressalente e aplica a função de filtro sobre JavaScript em cada item da matriz, retornando uma nova matriz de cadeias, para finalmente ingressar na matriz novamente. Regex pega uma string e retorna uma string e o processamento é feito via código nativo.
ShortFuse
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.