全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-17 8 分钟 ✍️ juanwangdev

HTML原生表单验证

HTML5提供原生表单验证,无需JavaScript即可实现基础验证功能。

required必填验证

基本用法

HTML
<input type="text" required>
<textarea required></textarea>
<select required>
  <option value="">请选择</option>
  <option value="1">选项1</option>
</select>

自定义提示

HTML
<input type="text" required
       oninvalid="this.setCustomValidity('此项为必填')"
       oninput="this.setCustomValidity('')">

required适用于text、password、email、tel、url、number、date、select、textarea等类型。

pattern正则验证

基本用法

HTML
<!-- 手机号 -->
<input type="tel" pattern="^1[3-9]\d{9}$"
       placeholder="请输入11位手机号">

<!-- 邮编 -->
<input type="text" pattern="\d{6}" placeholder="6位邮政编码">

<!-- 用户名:字母开头,3-16位 -->
<input type="text" pattern="^[a-zA-Z][a-zA-Z0-9_]{2,15}$"
       placeholder="字母开头,3-16位">

配合title提示

HTML
<input type="text" pattern="\d{6}"
       title="请输入6位数字邮政编码"
       placeholder="邮政编码">

常用正则模式

用途pattern值
手机号^1[3-9]\d{9}$
邮箱简化^[\w.-]+@[\w.-]+\.\w+$
身份证^\d{17}[\dXx]$
密码(6-20位)^.{6,20}$
纯数字^\d+$
纯字母^[a-zA-Z]+$

数值范围验证

min/max属性

HTML
<!-- 年龄范围 -->
<input type="number" min="0" max="150" placeholder="年龄">

<!-- 日期范围 -->
<input type="date" min="2024-01-01" max="2024-12-31">

<!-- 文件大小(配合accept) -->
<input type="range" min="0" max="100" value="50">

step步长验证

HTML
<!-- 整数 -->
<input type="number" step="1" value="0">

<!-- 小数(0.01精度) -->
<input type="number" step="0.01" min="0" placeholder="金额">

<!-- 时间间隔(15分钟) -->
<input type="time" step="900">

<!-- 日期间隔(周) -->
<input type="date" step="7">

maxlength/minlength长度验证

HTML
<!-- 最小长度 -->
<input type="text" minlength="6" placeholder="至少6个字符">

<!-- 最大长度 -->
<input type="text" maxlength="20" placeholder="最多20个字符">

<!-- 范围限制 -->
<input type="password" minlength="8" maxlength="20"
       placeholder="8-20位密码">

验证状态与样式

CSS伪类选择器

CSS
/* 验证通过 */
input:valid { border-color: green; }

/* 验证失败 */
input:invalid { border-color: red; }

/* 必填未填写 */
input:required:invalid { border-color: orange; }

/* 可选字段 */
input:optional { border-color: gray; }

JavaScript验证API

JavaScript
const input = document.querySelector('input');

// 检查有效性
input.checkValidity();  // 返回 true/false

// 验证状态对象
input.validity;
// {
//   valid: false,
//   valueMissing: true,    // required未填
//   patternMismatch: true, // pattern不匹配
//   rangeUnderflow: true,  // 小于min
//   rangeOverflow: true,   // 大于max
//   stepMismatch: true,    // step不匹配
//   tooShort: true,        // 小于minlength
//   tooLong: true,         // 大于maxlength
//   typeMismatch: true     // 类型不匹配(email/url等)
// }

// 触发验证提示
input.reportValidity();

// 自定义验证消息
input.setCustomValidity('自定义错误提示');

表单级验证

novalidate跳过验证

HTML
<form novalidate>
  <input type="email" required>
  <button type="submit">提交</button>
</form>

formnovalidate按钮跳过

HTML
<form>
  <input type="text" required>
  <button type="submit">提交</button>
  <button type="submit" formnovalidate>保存草稿</button>
</form>

禁用默认提示

HTML
<form novalidate onsubmit="return validateForm(this)">
  <!-- 使用JavaScript自定义验证 -->
</form>

验证属性速查表

属性说明适用类型
required必填text, select, textarea等
pattern正则匹配text, tel, email, password
min最小值number, date, time, range
max最大值number, date, time, range
step步长number, date, time, range
minlength最小长度text, password, textarea
maxlength最大长度text, password, textarea

要点总结

  • required实现必填验证
  • pattern配合正则表达式验证格式
  • min/max/step控制数值和日期范围
  • CSS伪类(:valid/:invalid)提供验证样式
  • checkValidity()检查验证状态
  • setCustomValidity()自定义错误提示

📝 发现内容有误?点击此处直接编辑

← 上一篇 HTML validity对象
下一篇 → HTML表单提交与编码
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库