JavaScript 表单验证

什么是表单验证

用户在表单里填写姓名、邮箱、密码等内容后,浏览器要把数据提交给服务器。如果允许空值、乱填的邮箱、太短的密码直接提交,服务器就要处理大量非法数据。表单验证就是在提交前检查输入是否合法、立刻给出提示,让用户当场改正。

用 JavaScript 做即时校验

在输入框失焦(blur)或按键(keyup)时调用校验函数,用户边输入边得到反馈:

<input type="text" id="name" placeholder="请输入姓名">
<p id="nameTip" style="color:red"></p>
<script>
document.getElementById("name").onblur = function () {
    var v = this.value.trim();
    var tip = document.getElementById("nameTip");
    if (v === "") {
        tip.innerHTML = "姓名不能为空";
    } else if (v.length < 2) {
        tip.innerHTML = "姓名至少 2 个字";
    } else {
        tip.innerHTML = "✓ 姓名可用";
    }
};
</script>

效果:输入框失去焦点时,按规则在下方显示对应提示文字。

用正则校验邮箱

常见的邮箱格式可以用正则表达式匹配:

function isEmail(str) {
    return /^\w+@\w+(\.\w+)+$/.test(str);
}
console.log(isEmail("tom@qq.com")); // 输出:true
console.log(isEmail("abc@qq"));     // 输出:false

校验密码强度

逐条检查长度与字符组成,给出具体提示:

function checkPassword(pwd) {
    if (pwd.length < 6) {
        return "密码至少 6 位";
    }
    if (!/[0-9]/.test(pwd) || !/[a-zA-Z]/.test(pwd)) {
        return "密码需同时包含字母和数字";
    }
    return "密码强度合格";
}
console.log(checkPassword("12345"));  // 输出:密码至少 6 位
console.log(checkPassword("abc123")); // 输出:密码强度合格

在提交时统一验证

onsubmit 事件里做最终检查,返回 false 可以阻止表单提交:

<form id="myForm">
    <input type="text" id="phone" placeholder="手机号">
    <button type="submit">注册</button>
</form>
<script>
document.getElementById("myForm").onsubmit = function () {
    var phone = document.getElementById("phone").value;
    if (!/^1\d{10}$/.test(phone)) {
        alert("手机号格式不正确");
        return false; // 阻止提交
    }
    return true; // 允许提交
};
</script>

效果:手机号不合法时点击注册不会提交,并弹出提示。

提醒:客户端验证只为改善用户体验,服务器端仍然必须做同样的校验,因为用户可以绕过浏览器直接提交数据。

小结

表单验证分两步走:输入过程中即时提示、提交时统一把关;配合 trim() 去空格、正则匹配和 onsubmit 返回 false,就能做出友好又可靠的表单。

笔记加载中…