Como verificar corretamente se uma string é um número em JavaScript? Função IsNumeric()
Olá a todos! Estou escrevendo em JavaScript e me deparei com um problema típico — preciso verificar se o valor inserido pelo usuário é um número. Por exemplo, existe um formulário onde o usuário insere o preço de um produto, e quero ter certeza de que é realmente um número, e não texto.
Tentei usar isNaN(), mas ele se comporta de forma estranha. Por exemplo:
console.log(isNaN('123')); // false — parece número
console.log(isNaN('12.3')); // false — também número
console.log(isNaN('')); // false — string vazia é considerada número?!
console.log(isNaN(' ')); // false — espaços também são número?
console.log(isNaN('abc')); // true — isso é compreensível
console.log(isNaN(true)); // false — true=1, isso é número?!
console.log(isNaN(null)); // false — null=0, também número?!
Preciso que a função IsNumeric() retorne true apenas para números decimais normais (inteiros e fracionários com ponto), e para strings vazias, espaços, valores booleanos, null, undefined e outros lixos — false.
Também gostaria que houvesse suporte para números negativos.