maxlength/minlength是浏览器原生输入限制而非校验机制:maxlength按Unicode码点截断输入且不触发验证,minlength仅在提交或调用验证API时生效,二者均需配合required或验证API才能阻断提交,且属性值必须为纯整数字符串。
maxlength 和 minlength 是浏览器原生的字符数限制机制,不是“校验”而是“截断+阻止”,不触发表单提交失败,只控制输入行为;真正触发校验失败(如 reportValidity() 报错、提交阻断)需配合 required 或显式调用验证 API。
当用户在 <input type="text" maxlength="10"> 中已输入 10 个字符,第 11 次按键(含中文、空格、emoji)会被浏览器直接忽略——这是 UI 层拦截,不是 DOM 事件或 JS 可捕获的“输入”。
maxlength 仍按码点数截断,导致显示异常value 始终 ≤ maxlength
maxlength 对 type="number"、type="checkbox"、type="file" 无效,设了也不起作用el.value = "a".repeat(20)),浏览器不会自动截断,需开发者自己处理minlength 不阻止用户删除内容,它只在 checkValidity()、reportValidity() 或原生 submit 触发时参与判断。例如:<input type="text" minlength="5"> 允许用户输 0 个字符,但点击提交时会报错。
required 才能避免“空值绕过”:否则用户留空也能通过 minlength 检查(因空字符串长度为 0,小于 5,但 required 缺失时不算违例)minlength 时,el.validity.tooShort 为 true 仅当 value.length < minlength 且 value 非空;若为空,则由 valueMissing 控制n 算 1 个字符,Windows 的 rn 算 2 个前端用 String.prototype.length 计算,后端若用字节长度(如 UTF-8 编码下中文占 3 字节)、或按图形单元(grapheme cluster)统计(如处理 ??),结果可能不同。
立即学习“前端免费学习笔记(深入)”;
maxlength,而是前后端约定统一按 Unicode 码点计数,并在后端做二次截断(如 Python 用 text[:10],而非 text.encode()[:10])Intl.Segmenter(现代环境)或 grapheme-splitter 库做图形单元计数,再替换原生 maxlength
最易被忽略的一点:maxlength 和 minlength 的值是字符串,不是数字;写成 maxlength="010" 或 maxlength="10.5" 会导致解析失败,浏览器降级为无限制——务必确保属性值是纯整数字符串。