Sobre este problema HTML
A especificação HTML define maxlength como aceitando apenas um número inteiro não negativo válido — uma string de um ou mais dígitos ASCII que representa um número maior ou igual a zero. Uma string vazia não satisfaz este requisito, por isso o validador W3C sinaliza-a como um erro. Isto acontece frequentemente quando um valor é gerado dinamicamente por um CMS, motor de templates ou framework JavaScript e o valor acaba por ficar em branco, ou quando um programador adiciona o atributo como marcador de posição com a intenção de o preencher mais tarde.
Por que isto é importante
Embora a maioria dos browsers ignore silenciosamente um maxlength vazio e não imponha nenhum limite de caracteres, confiar neste comportamento é problemático por várias razões:
- Conformidade com standards: HTML inválido pode levar a comportamento imprevisível entre diferentes browsers e versões. O que funciona hoje pode não funcionar amanhã.
-
Acessibilidade: Tecnologias assistivas podem ler ou interpretar o atributo
maxlengthpara comunicar restrições de entrada aos utilizadores. Um valor vazio pode causar anúncios confusos ou incorretos. -
Manutenibilidade: Um
maxlengthvazio é ambíguo — não é claro se o programador pretendia nenhum limite, se esqueceu de definir um valor, ou se um erro causou a falta do valor.
Como corrigir
Tem duas opções:
-
Definir um número inteiro não negativo válido: Forneça um número concreto que representa o número máximo de caracteres que o utilizador pode inserir, como
maxlength="100". -
Remover o atributo: Se não precisa de impor um limite de caracteres, simplesmente omita
maxlengthpor completo. Não há necessidade de o incluir com um valor vazio.
Valores válidos para maxlength incluem "0", "1", "255", ou qualquer outro número inteiro não negativo. Os seguintes não são válidos: strings vazias (""), números negativos ("-1"), números decimais ("10.5"), ou strings não numéricas ("none").
Onde se aplica maxlength
O atributo maxlength é significativo em tipos de input de entrada de texto: text, search, url, tel, email, password, e também no elemento textarea. Para tipos de input não textuais como number, date, range, ou checkbox, o atributo não tem efeito e não deve ser usado.
Exemplos
❌ Incorreto: string vazia desencadeia o erro de validação
<input type="text" name="username" maxlength="">
❌ Incorreto: outros valores inválidos
<input type="text" name="username" maxlength="-1">
<input type="email" name="email" maxlength="none">
<input type="text" name="bio" maxlength="10.5">
✅ Correto: comprimento máximo explícito
<input type="text" name="username" maxlength="30">
✅ Correto: omitir o atributo quando não é necessário nenhum limite
<input type="text" name="comment">
✅ Correto: maxlength num textarea
<textarea name="bio" maxlength="500"></textarea>
✅ Correto: valor dinâmico com um fallback
Se o seu valor maxlength vem de um template ou CMS, certifique-se de que produz um número válido ou omite o atributo completamente. Por exemplo, numa linguagem de templates, use lógica condicional:
<!-- Renderizar maxlength apenas se o valor estiver definido -->
<input type="text" name="username" maxlength="100">
Em vez de renderizar um atributo vazio como maxlength="", certifique-se de que o seu template ignora o atributo quando nenhum valor está configurado.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.