textarea 不支持 pattern 属性,校验需用 JavaScript;可通过 split('\n') 处理换行,正则启用 m 标志匹配每行,如 /^[a-z]+$/gm,限制行数等须手动实现。

textarea 不支持 pattern 属性
直接在 textarea 上写 pattern 是无效的——HTML 规范明确不支持该属性作用于 textarea 元素。哪怕你写了 <textarea pattern=".*"></textarea>,浏览器完全忽略,checkValidity() 始终返回 true(除非有 required 且为空)。
多行文本校验必须用 JavaScript
要对换行符、空行、行数、每行格式等做校验,只能靠 JS 手动处理。关键点:
-
textarea.value包含\n,可用.split('\n')拆成行数组 - 正则需显式启用
m(multiline)标志才能让^和$匹配每行首尾,例如/^[a-z]+$/gm - 避免用
.test()直接匹配整个字符串——它默认单行模式,\n会中断匹配 - 常见需求示例:
– 限制最多 5 行:value.split('\n').length <br>– 每行只能是 3–10 位字母数字:<code>/^[a-zA-Z0-9]{3,10}$/.test(line)
实时校验 textarea 的 input 事件要注意换行符处理
用户按 Enter 插入 \n,但粘贴内容可能带 \r\n(Windows)或 \r(旧 Mac)。统一处理建议:
- 用
value.replace(/\r\n/g, '\n').replace(/\r/g, '\n')标准化换行符 - 监听
input事件时,避免高频触发导致卡顿,可加简单防抖(如setTimeout延迟 200ms) - 校验失败后调用
setCustomValidity('...'),再触发reportValidity()才能显示气泡提示
别指望 title 提示多行规则
title 属性在 textarea 上仅作为悬停提示,无法动态反映行数超限、某行格式错误等具体问题。真正有用的反馈必须由 JS 构建:比如在输入框下方放一个 <div class="error"></div>,根据校验结果实时更新文本。
立即学习“前端免费学习笔记(深入)”;
多行文本的边界情况比单行复杂得多——空行算不算一行?首尾空白要不要 trim?是否允许纯空白行?这些逻辑 JS 可控,而 pattern 完全无能为力。



















