- 表单验证(用户名、密码、邮箱、手机号)
- 密码强度检测
- 实时验证反馈
- 表单提交
- 友好的错误提示
最终效果预览
第一步:HTML 结构
这是注册表单的骨架,我们使用一个 div 作为容器,内部包含各种输入字段和提示信息。

(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">jQuery 用户注册</title>
<!-- 引入 CSS 文件 -->
<link rel="stylesheet" href="style.css">
<!-- 引入 jQuery 库 -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<div class="container">
<h1>用户注册</h1>
<form id="registrationForm" novalidate>
<div class="form-group">
<label for="username">用户名</label>
<input type="text" id="username" name="username" placeholder="请输入用户名 (4-16位字母或数字)">
<div class="error-message" id="username-error"></div>
</div>
<div class="form-group">
<label for="email">电子邮箱</label>
<input type="email" id="email" name="email" placeholder="请输入您的电子邮箱">
<div class="error-message" id="email-error"></div>
</div>
<div class="form-group">
<label for="phone">手机号码</label>
<input type="tel" id="phone" name="phone" placeholder="请输入您的手机号码">
<div class="error-message" id="phone-error"></div>
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" id="password" name="password" placeholder="请输入密码 (至少8位,包含字母和数字)">
<div class="password-strength">
<div class="strength-bar"></div>
</div>
<div class="error-message" id="password-error"></div>
</div>
<div class="form-group">
<label for="confirm-password">确认密码</label>
<input type="password" id="confirm-password" name="confirm-password" placeholder="请再次输入密码">
<div class="error-message" id="confirm-password-error"></div>
</div>
<button type="submit" id="submitBtn">注册</button>
</form>
</div>
<!-- 引入 JS 文件 -->
<script src="script.js"></script>
</body>
</html>
关键点:
novalidate: 这个属性可以阻止浏览器默认的、有时不够美观的验证提示,让我们完全用 jQuery 来控制验证逻辑。id: 每个输入框和错误提示div都有唯一的id,方便 jQuery 精准选择和操作。class: 使用class(如form-group,error-message) 来应用通用的样式。
第二步:CSS 样式
为了让表单看起来美观且用户友好,我们添加一些 CSS 样式。
/* style.css */
body {
font-family: 'Arial', sans-serif;
background-color: #f4f7f6;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
background-color: #ffffff;
padding: 2rem;
border-radius: 8px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
width: 100%;
max-width: 400px;
}
h1 {
text-align: center;
color: #333;
margin-bottom: 1.5rem;
}
.form-group {
margin-bottom: 1.2rem;
}
label {
display: block;
margin-bottom: 0.5rem;
color: #555;
font-weight: bold;
}
input[type="text"],
input[type="email"],
input[type="tel"],
input[type="password"] {
width: 100%;
padding: 0.8rem;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box; /* 确保 padding 不会影响宽度 */
transition: border-color 0.3s;
}
input:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 5px rgba(0, 123, 255, 0.5);
}
/* 错误状态样式 */
input.error {
border-color: #dc3545;
}
.error-message {
color: #dc3545;
font-size: 0.85rem;
margin-top: 0.3rem;
min-height: 1.2em; /* 防止布局抖动 */
display: none; /* 默认隐藏 */
}
/* 密码强度条 */
.password-strength {
height: 5px;
background-color: #e0e0e0;
margin-top: 0.5rem;
border-radius: 3px;
overflow: hidden;
}
.strength-bar {
height: 100%;
width: 0;
transition: width 0.3s, background-color 0.3s;
}
.strength-bar.weak {
width: 33%;
background-color: #ff4757;
}
.strength-bar.medium {
width: 66%;
background-color: #ffa502;
}
.strength-bar.strong {
width: 100%;
background-color: #2ed573;
}
/* 提交按钮 */
button[type="submit"] {
width: 100%;
padding: 0.8rem;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
font-size: 1rem;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s;
}
button[type="submit"]:hover {
background-color: #0056b3;
}
关键点:
.error: 当输入框验证失败时,我们给它添加这个class,改变边框颜色。.error-message: 默认是display: none,当需要显示错误时,我们通过 jQuery 将其display设为block。.strength-bar: 用于显示密码强度的动态条。
第三步:jQuery 交互逻辑
这是整个模板的核心,负责所有的验证、交互和提交逻辑。

(图片来源网络,侵删)
// script.js
$(document).ready(function() {
// 当表单提交时触发
$('#registrationForm').on('submit', function(event) {
// 阻止表单的默认提交行为
event.preventDefault();
// 重置所有错误提示
$('.error-message').text('').hide();
$('input').removeClass('error');
// 获取表单数据
var username = $('#username').val().trim();
var email = $('#email').val().trim();
var phone = $('#phone').val().trim();
var password = $('#password').val();
var confirmPassword = $('#confirm-password').val();
var isValid = true;
// 1. 验证用户名
if (!username) {
showError('username', '用户名不能为空');
isValid = false;
} else if (!/^[a-zA-Z0-9]{4,16}$/.test(username)) {
showError('username', '用户名必须是4-16位字母或数字');
isValid = false;
}
// 2. 验证邮箱
if (!email) {
showError('email', '邮箱不能为空');
isValid = false;
} else if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) {
showError('email', '请输入有效的邮箱地址');
isValid = false;
}
// 3. 验证手机号
if (!phone) {
showError('phone', '手机号不能为空');
isValid = false;
} else if (!/^1[3-9]\d{9}$/.test(phone)) {
showError('phone', '请输入有效的11位手机号码');
isValid = false;
}
// 4. 验证密码
if (!password) {
showError('password', '密码不能为空');
isValid = false;
} else if (!/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/.test(password)) {
showError('password', '密码至少8位,必须包含字母和数字');
isValid = false;
}
// 5. 验证确认密码
if (!confirmPassword) {
showError('confirm-password', '请确认密码');
isValid = false;
} else if (password !== confirmPassword) {
showError('confirm-password', '两次输入的密码不一致');
isValid = false;
}
// 如果所有验证都通过,则提交表单
if (isValid) {
// 在实际项目中,这里会使用 AJAX 发送数据到服务器
// $.ajax({
// url: '/api/register',
// type: 'POST',
// data: {
// username: username,
// email: email,
// phone: phone,
// password: password
// },
// success: function(response) {
// alert('注册成功!');
// $('#registrationForm')[0].reset(); // 重置表单
// },
// error: function(xhr) {
// alert('注册失败: ' + xhr.responseText);
// }
// });
// 这里为了演示,我们只显示一个成功提示
alert('注册成功!');
$('#registrationForm')[0].reset(); // 重置表单
$('.strength-bar').removeClass('weak medium strong').css('width', '0');
}
});
// 实时密码强度检测
$('#password').on('input', function() {
var password = $(this).val();
var strengthBar = $('.strength-bar');
if (password.length === 0) {
strengthBar.removeClass('weak medium strong').css('width', '0');
return;
}
// 密码强度逻辑
if (password.length < 6) {
strengthBar.removeClass('medium strong').addClass('weak');
} else if (password.length >= 6 && password.length <= 10) {
strengthBar.removeClass('weak strong').addClass('medium');
} else {
// 检查是否包含字母和数字
if (password.match(/[a-z]/) && password.match(/[0-9]/)) {
strengthBar.removeClass('weak medium').addClass('strong');
} else {
strengthBar.removeClass('weak strong').addClass('medium');
}
}
});
// 输入框获得焦点时清除错误状态
$('input').on('focus', function() {
$(this).removeClass('error');
var errorId = $(this).attr('id') + '-error';
$('#' + errorId).text('').hide();
});
// --- 辅助函数 ---
function showError(fieldId, message) {
$('#' + fieldId).addClass('error');
$('#' + fieldId + '-error').text(message).show();
}
});
逻辑解析:
$(document).ready(...): 确保 DOM 完全加载后再执行 jQuery 代码。$('#registrationForm').on('submit', ...): 监听表单的submit事件。event.preventDefault(): 非常重要,它阻止了浏览器默认的表单提交(页面刷新),让我们有机会在 JavaScript 中处理数据。isValid标志: 一个布尔变量,用于跟踪所有验证是否通过,如果任何一个验证失败,它就设为false。- 验证规则:
- 使用
.trim()去除输入内容两端的空格。 - 使用正则表达式 (
regex) 来验证格式,如用户名、邮箱、手机号和密码。 - 如果验证失败,调用
showError()函数来显示错误信息,并将isValid设为false。
- 使用
showError(fieldId, message): 一个辅助函数,用于给输入框添加.error样式,并在对应的错误提示div中显示消息。- AJAX 提交: 在
if (isValid)块中,我注释了标准的 AJAX 提交代码,在实际开发中,你应该取消注释并替换成你的后端 API 地址,这里用alert和form.reset()来模拟成功提交。 - 实时密码强度:
- 监听
#password输入框的input事件(只要内容变化就触发)。 - 根据密码长度和复杂度,动态地给
.strength-bar添加不同的class(weak,medium,strong),这些 class 对应不同的 CSS 样式。
- 监听
- 焦点清除错误: 当用户点击一个输入框时,清除该字段之前的错误状态,提供更好的用户体验。
如何使用
- 创建一个项目文件夹。
- 在文件夹中创建三个文件:
index.html、style.css和script.js。 - 将上面的代码分别复制到对应的文件中。
- 用浏览器打开
index.html文件,你就可以看到一个功能完整的注册表单了。
这个模板非常实用,你可以根据自己项目的具体需求(比如不同的验证规则、后端 API 等)进行修改和扩展。

(图片来源网络,侵删)
