Sobre este problema HTML
O atributo min define o valor mínimo aceitável para tipos de input de formulário como number, range, date, time, datetime-local, week e month. Quando o browser ou o validador W3C encontra min="", tenta interpretar a string vazia como um número de vírgula flutuante e falha porque a string vazia não é uma representação válida de qualquer número segundo as regras da especificação HTML para interpretar números de vírgula flutuante.
Este problema surge frequentemente quando motores de templates ou código server-side definem dinamicamente o atributo min mas produzem um valor vazio quando não há mínimo configurado, ou quando programadores adicionam o atributo como placeholder com a intenção de o preencher mais tarde.
Porque isto é importante
-
Conformidade com standards: A especificação HTML exige explicitamente que o valor do atributo
minseja um número de vírgula flutuante válido (para tipos numéricos) ou uma string de data/hora válida (para tipos de data/hora). Uma string vazia não satisfaz nenhum dos requisitos. -
Comportamento imprevisível do browser: Quando os browsers encontram um valor
mininválido, tipicamente ignoram completamente o atributo. Isto significa que a sua restrição pretendida desaparece silenciosamente, permitindo potencialmente que utilizadores submetam valores fora do intervalo. -
Preocupações de acessibilidade: Tecnologias assistivas podem depender de
minemaxpara comunicar intervalos de input válidos aos utilizadores. Um valor inválido pode levar a orientações confusas ou em falta para utilizadores de leitores de ecrã. -
Problemas de validação de formulário: A validação incorporada do browser usando a Constraint Validation API depende de valores
minválidos. Uma string vazia pode causar comportamentos inconsistentes da validação nativa do browser entre diferentes browsers.
Como corrigir
Tem duas opções diretas:
-
Forneça um valor válido: Defina
mincom o número mínimo real ou string de data/hora que pretende impor. -
Remova o atributo: Se não for necessária qualquer restrição mínima, simplesmente omita o atributo
min. O input aceitará então qualquer valor dentro do intervalo natural do seu tipo.
Se o seu valor min provém de lógica dinâmica server-side ou JavaScript, certifique-se de que o atributo só é renderizado quando um valor válido está disponível, em vez de produzir uma string vazia como alternativa.
Exemplos
❌ Inválido: string vazia para min
<input type="number" min="" max="10">
A string vazia "" não é um número de vírgula flutuante válido, por isso isto desencadeia o erro de validação.
✅ Corrigido: forneça um número válido
<input type="number" min="0" max="10">
✅ Corrigido: remova min se não for necessário mínimo
<input type="number" max="10">
❌ Inválido: min vazio num input range
<input type="range" min="" max="100" step="5">
✅ Corrigido: min válido num input range
<input type="range" min="0" max="100" step="5">
❌ Inválido: min vazio num input date
<input type="date" min="" max="2025-12-31">
Para inputs de data, min deve ser uma string de data válida no formato YYYY-MM-DD — uma string vazia é igualmente inválida aqui.
✅ Corrigido: min válido num input date
<input type="date" min="2025-01-01" max="2025-12-31">
Lidar com valores dinâmicos em templates
Se estiver a usar uma linguagem de templating e o valor mínimo pode nem sempre existir, renderize condicionalmente o atributo em vez de produzir um valor vazio. Por exemplo, num pseudocódigo de template genérico:
<!-- Em vez de sempre produzir o atributo: -->
<input type="number" min="" max="10">
<!-- Inclua-o apenas quando um valor estiver disponível: -->
<input type="number" min="5" max="10">
Na prática, use a lógica condicional do seu motor de templating (por exemplo, {% if min_value %}min="{{ min_value }}"{% endif %} em Jinja2, ou construções similares) para garantir que min só está presente quando contém um valor válido.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.