码上问学问代码之理,学编程之道

单元六 · HTML5 表单的应用

网站和用户「对话」的入口。本单元对应教材单元六(8 学时):表单与 input 元素、其他表单元素、表单验证与正则表达式。 没有表单,注册、登录、搜索、评论都无从谈起——它也是和后端 API 对接的第一道关口(回想 Python Web 课的注册登录接口)。

本单元目标:能写含文本/密码/邮箱/数字/日期的 input;会用 textarea/select/radio/checkbox;理解 required/pattern 原生验证与正则基础。

一、知识准备:表单是「数据收集单」

表单的使命:收集用户输入,按 name 打包提交给服务器浏览器端(表单)<label> 用户名 <input name=…><input type="password"><input type="email"><button type="submit">点击提交打包成键值对username=lihuapwd=123456email=…@…按 method 发送:GET 拼在 URL 后服务器逐个接收name 属性是「打包时的字段名」——没有 name 的控件不会提交,这是表单第一大坑label 的 for 绑定 input 的 id:点文字也能聚焦,读屏软件也能读出标签

生活类比:填表

纸质登记表上「姓名 / 电话 / 日期」每个格子就是 <input>;多选的「兴趣爱好」是 checkbox;下拉的「省份」是 <select>;提交按钮把整张单子交给前台(后端)。name 是字段名,是前后端约定的「格子编号」。

  • input 类型:text / password / email / number / date / radio / checkbox / submit。
  • 其他元素:<textarea> 多行、<select><option> 下拉、<label> 关联提升可点性与无障碍。
  • 原生验证:required(必填)、type="email"(格式)、pattern(正则)、min/max。
  • 正则速记:^\d{11}$ = 11 位数字(手机号);^[\w.]+@[\w.]+\.\w+$ ≈ 邮箱。
  • 二、实战演练:注册表单(含前端验证)

    文件: u6/register.html
    register.html
    <form action="/api/register" method="post">
      <label>手机号 <input name="phone" required
        pattern="^\d{11}$" placeholder="11 位手机号"></label>
      <label>密码 <input name="pwd" type="password"
        required minlength="6"></label>
      <label>角色
        <select name="role">
          <option value="reader">读者</option>
          <option value="author">作者</option>
        </select>
      </label>
      <button type="submit">注册</button>
    </form>
    效果预览运行结果
    效果:手机号不填或非 11 位数字、密码少于 6 位,点提交会被浏览器拦下并提示——无需写一行 JS。
    故意写错:把 name 写错或漏写——表单能提交但后端收不到字段。name 是前后端契约,错一个全乱。也提醒:前端验证只是体验,后端必须再验一次(呼应 Python Web 安全课)。

    三、强化训练

    1radio 和 checkbox 在 name 属性上有什么约定?(同组 radio 要同 name)
    2pattern="^\d{11}$" 中 ^ 和 $ 各表示什么?少写会怎样?
    3为什么前端验证了,后端还要再验证一次?

    四、课后实训

    作业:做一个 comment.html 书评表单:含昵称、邮箱(type=email)、评分(1-5 number)、书评内容(textarea)、是否匿名(checkbox)、提交按钮;全部加合适的原生验证。

    本单元小结

    ← 上一单元单元五 · 盒子模型

    📝 本节自测

    做完点「检查本节」看解析与得分;做错可重做。