Frontend Academy · 课时

表单验证属性

应用 required、minlength、maxlength、pattern、min、max 和 step 属性,并使用 :valid 和 :invalid 伪类设置验证状态样式。

第 4 / 4 课13 个步骤

表单验证属性 是 CoddyKit 上的免费 Frontend Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Frontend Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Frontend Academy 课程共包含 4 节课。

浏览器原生验证

HTML5 通过属性提供内置表单验证。提交表单时,浏览器会验证每个字段。如果验证失败,浏览器会显示原生错误提示框并阻止提交,基本情况下无需使用 JavaScript。

required

为输入框、选择框或 textarea 添加 required 会使其成为必填项。提交表单时,如果字段为空,浏览器会显示错误。

<input type="text" name="name" required>
<select name="plan" required>
  <option value="">Choose plan...</option>
  <option value="free">Free</option>
</select>

minlength 和 maxlength

minlength 强制要求最少字符数。maxlength 会阻止输入超过最大长度。将二者结合使用,可以强制执行密码复杂度要求或限制评论长度。

<input type="password" name="pass" minlength="12" maxlength="128">
<textarea name="bio" maxlength="500"></textarea>

用于数值输入的 min、max 和 step

min 和 max 为数字和日期输入设置有效范围。step 设置递增幅度,适用于范围值(例如 5%)、小数精度和仅日期输入。

<input type="number" min="1" max="10" step="1">
<input type="range" min="0" max="100" step="5">
<input type="date" min="2025-01-01" max="2025-12-31">

pattern — 正则表达式验证

pattern 接受 JavaScript 正则表达式。输入内容必须匹配该模式,表单才能提交。请包含 title,以便在浏览器的错误提示框中说明预期格式。

<!-- UK postcode: -->
<input type="text" pattern="[A-Z]{1,2}[0-9]{1,2} ?[0-9][A-Z]{2}"
  title="Enter a valid UK postcode (e.g. SW1A 1AA)">

<!-- Username: letters, digits, underscore, 3-16 chars -->
<input type="text" pattern="[a-zA-Z0-9_]{3,16}" title="3-16 alphanumeric characters">

novalidate — 禁用原生验证

将 novalidate 添加到 <form> 元素,可以禁用所有浏览器原生验证。当您实现自定义 JavaScript 验证时,请这样做,以便用户获得一致的体验。

<form novalidate id="signup">
  <!-- custom validation in JS -->
</form>

在 JavaScript 中检查有效性

约束验证接口让您可以通过编程方式检查有效性:input.validity(ValidityState 对象)、input.checkValidity()(返回布尔值)、input.setCustomValidity(message)(设置自定义错误)。

const email = document.querySelector('#email');
if (!email.checkValidity()) {
  console.log(email.validationMessage); // browser's error text
  console.log(email.validity.valueMissing); // true if empty
  console.log(email.validity.typeMismatch); // true if not email format
}

setCustomValidity

调用 setCustomValidity(message) 并传入非空字符串,可使用自定义消息将输入标记为无效。传入空字符串可清除错误。它适用于需要服务器验证的字段,例如 username 的唯一性。

const username = document.querySelector('#username');
// After async uniqueness check:
if (taken) {
  username.setCustomValidity('This username is already taken.');
} else {
  username.setCustomValidity(''); // valid
}

有效与无效伪类

使用 CSS 伪类设置有效和无效输入的样式。请注意:在用户与输入交互之前,输入就可能处于无效状态。请使用 :user-invalid(现代浏览器支持),或先通过 JavaScript 添加“已交互”类。

/* Modern approach */
input:user-invalid {
  border-color: #e53e3e;
}
input:user-valid {
  border-color: #38a169;
}

/* Fallback: add .touched class on blur */
.touched:invalid { border-color: #e53e3e; }

使用 reportValidity 显示自定义错误消息

form.reportValidity() 会在所有字段上触发浏览器的原生验证界面。在设置自定义有效性消息后使用它,可以立即向用户显示这些消息,而不必等待提交事件。

易访问的错误显示模式

请按以下方式显示内联错误:1)在输入上添加 aria-invalid="true";2)显示一个通过 aria-describedby 与输入关联的错误段落;3)将焦点移至第一个无效字段。这样可以服务所有用户,包括使用屏幕阅读器的用户。

快速检查

哪个属性会将文本输入限制为最多 280 个字符?

回顾:表单验证属性

必填、最小长度/最大长度、最小值/最大值/步长、模式——这些都可以免费提供浏览器原生验证。实现自定义 JS 验证时,请使用禁用原生验证的设置。约束验证接口让 JavaScript 可以访问有效性状态。用户交互后,请使用 :user-invalid 设置错误样式。

免费开始

用 AI 导师学习 HTML — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
41
课程
163

常见问题解答

「表单验证属性」课时是免费的吗?

是的 — 「表单验证属性」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Frontend Academy 课程的其余内容,请升级到 CoddyKit PRO。 Frontend Academy 课程共包含 4 节课。

「表单验证属性」这节课中我会学到什么?

应用 required、minlength、maxlength、pattern、min、max 和 step 属性,并使用 :valid 和 :invalid 伪类设置验证状态样式。 你通过在浏览器中直接运行的动手代码来练习 Frontend Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Frontend Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Frontend Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「表单验证属性」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Frontend Academy 课中编写并运行代码吗?

能。每节 Frontend Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 表单控件:input 类型、select、textarea
  2. ARIA 与可访问性:label、role、aria-*
  3. 语义化 HTML5:语义化元素与 div 堆砌
  4. 表单验证属性
← 返回 Frontend Academy