Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Por mais que pareça simples, validar números decimais em JavaScript é uma tarefa que pode gerar armadilhas e confusão. Muitas soluções populares, como o uso de isNaN ou parseFloat, acabam considerando valores que nem sempre fazem sentido na hora de validar um input numérico, como notações hexadecimais ou strings vazias.
---
O desafio aqui é criar uma função que identifique corretamente se uma string representa um número decimal válido, independente do formato, sem aceitar valores que possam parecer numéricos, mas não são. Isso inclui evitar falsos positivos com valores hexadecimais, notações científicas, ou strings vazias. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Exemplos que a validação deve capturar:
E exemplos que devem ser rejeitados:
A maioria das funções simples, como !isNaN(parseFloat(str)), acaba permitindo valores como '0x89f', que representam hexadecimais, ou '1e10', que é notação científica, dependendo do uso. Essas soluções também podem aceitar strings vazias ou espaços, o que não é desejável.
Além disso, a coerção de tipos e o comportamento de funções como isNaN e Number.isFinite podem variar dependendo do ambiente, levando a inconsistências.
Para evitar essas armadilhas, uma estratégia eficiente é usar uma expressão regular que valide explicitamente os formatos numéricos decimais. A regex deve aceitar números com ou sem parte fracionária, com ou sem expoente, mas rejeitar qualquer coisa fora do padrão. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Por exemplo, uma expressão que cobre esses casos pode ser:
const decimalRegex = /^([+-]?\d*\.?\d+)([eE][+-]?\d+)?$/.
Essa regex valida uma sequência que pode começar com um sinal, seguido de dígitos opcionais, ponto decimal e dígitos obrigatórios, além de uma parte exponencial opcional. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Implementação da função:
function isDecimalNumber(str) {
if (typeof str !== 'string') return false. return decimalRegex.test(str.trim()). } Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
isDecimalNumber('123') => trueisDecimalNumber('-123.45') => trueisDecimalNumber('.25') => trueisDecimalNumber('1e10') => trueisDecimalNumber('0x1A') => falseisDecimalNumber('abc') => falseisDecimalNumber('') => falseisDecimalNumber(' ') => falseisDecimalNumber('1.2.3') => falseEsse método garante que apenas números decimais bem formados sejam considerados válidos, evitando falsos positivos comuns em validações mais simples. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Usar regex para validações é eficiente, mas também pode se tornar complexo ao tentar captar todos os formatos possíveis. É importante testar a regex com diversos casos de entrada, incluindo limites e formatos incomuns. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Outra consideração é garantir que a entrada seja uma string antes da validação, para evitar comportamentos inesperados com outros tipos. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
1. Defina uma regex específica para números decimais.
2. Faça uma validação estrita, removendo espaços em branco antes.
3. Teste com uma série de casos conhecidos, incluindo limites.
4. Use essa função sempre que precisar validar entradas de usuário ou dados externos.
Validação precisa não é só questão de rigor técnico, mas de evitar problemas na experiência do usuário e na integridade dos dados. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Quantas vezes você já teve que lidar com validações que pareceram simples, mas causaram dores de cabeça depois? Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Carregando comentários...