maxlength/minlength 按 Unicode 字符个数校验,英文、中文、emoji 等均计为 1 字符;浏览器对粘贴内容的截断不可靠,需手动监听 input 事件截断;minlength 对空格等控制字符也计数,业务若需非空白字符校验须用 JavaScript;移动端输入法可能绕过 maxlength,后端必须二次校验。

maxlength/minlength 是按字符数校验,不是字节数
这两个属性只看 Unicode 字符个数,不管字符实际占多少字节。英文、数字、ASCII 符号都算 1 个字符,中文、emoji、带变音符号的字母(如 ñ、ü)也各算 1 个字符。所以纯英文或纯数字输入时,maxlength="10" 就是最多输 10 个字母或数字,不会因为编码不同而多或少。
浏览器端校验不拦截粘贴和拖入内容
用户复制一串 20 位数字粘贴进 maxlength="10" 的输入框,浏览器默认会截断到前 10 位,但这个行为不可靠:某些浏览器(如旧版 Safari)可能允许粘贴超长内容,且 input 事件监听不到被截断的过程。更稳妥的做法是监听 input 或 blur 事件手动截断:
document.getElementById('myInput').addEventListener('input', function() {
if (this.value.length > 10) {
this.value = this.value.slice(0, 10);
}
});
minlength 对空格和控制字符也计数
minlength 同样按字符长度判断,空格、制表符、换行符都算有效字符。比如 minlength="5",用户只输入 4 个空格再加 1 个字母,也能通过校验。如果业务要求“至少 5 个非空白字符”,就不能依赖 minlength,得用 JavaScript 配合正则或 trim() 判断:
this.value.trim().length >= 5- 注意
trim()不处理全角空格、\u200B(零宽空格)等,需额外过滤
移动端软键盘可能绕过 maxlength 限制
部分 Android 输入法(尤其第三方键盘)在长按输入或语音转文字时,会一次性插入超长文本,跳过 maxlength 截断逻辑。这时候仅靠 HTML 属性无法保证数据合规。后端必须做二次校验,前端也建议加一层 submit 前检查:
立即学习“前端免费学习笔记(深入)”;
if (input.value.length > 10) {
alert('输入不能超过 10 个字符');
return false;
}
别指望浏览器帮你兜底——尤其是用户能绕过 UI 直接发请求的时候。



















