JS表单验证(附带示例)
使用 JavaScript 来验证提交数据(客户端验证)比将数据提交到服务器再进行验证(服务器端验证)用户体验要更好,因为客户端验证发生在用户浏览器中,无需向服务器发送请求,所以速度更快,而服务器端验证,需要先将数据提交到服务器,然后服务器再将结果返回给浏览器,用户需要等待服务器响应结果才能知道哪里出了问题。
注意:虽然客户端验证更快,但是客户端验证并不能替代服务器端验证。在开发过程中,无论是否进行客户端验证,都需要在服务器端对于用户提交的数据进行验证,因为用户可以在浏览器中禁用 JavaScript。
使用 JavaScript 进行表单验证
表单验证通常由两个部分组成:必填字段验证:确保必填的字段都被填写;
数据格式验证:确保所填内容的类型和格式是正确的、有效的。
必填字段验证
必填字段验证在用户注册时比较常见,通过必填字段验证,能够确保表单中的必填字段都被填写,例如用户名、密码、邮箱等。实现必填字段验证非常简单,只需要通过程序来检查必填表单元素的值是否为空即可,示例代码如下:
运行结果如下:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
<style>
.error{
color: red;
}
label{
display: inline-block;
width: 70px;
text-align: right;
}
</style>
</head>
<body>
<form onsubmit="return validateForm()" action="" method="post">
<fieldset>
<legend>注册:</legend>
<div class="row">
<label>用户名:</label>
<input type="text" name="name">
<span class="error" id="nameErr"></span>
</div>
<div class="row">
<label>密码:</label>
<input type="password" name="pwd">
<span class="error" id="pwdErr"></span>
</div>
<div class="row">
<label>Email:</label>
<input type="text" name="email">
<span class="error" id="emailErr"></span>
</div>
<div class="row">
<label>手机号:</label>
<input type="text" name="mobile" maxlength="11">
<span class="error" id="mobileErr"></span>
</div>
<div class="row">
<label>验证码:</label>
<input type="text" name="captcha" maxlength="4"><span id="captcha" onclick="getCaptcha()"></span>
<span class="error" id="captchaErr"></span>
</div>
<div class="row">
<input type="submit" value="注册">
</div>
</fieldset>
</form>
<script>
var captcha = getCaptcha(); // 生成验证码
// 清空 input 标签后的提示信息
var tags = document.getElementyTagName('input');
for (var i = 0; i < tags.length; i++) {
tags[i].onchange = function(){
var idname = this.name + "Err";
document.getElementById(idname).innerHTML = '';
}
}
// 显示错误消息
function printError(elemId, hintMsg) {
document.getElementById(elemId).innerHTML = hintMsg;
}
// 验证表单数据
function validateForm() {
// 获取表单元素的值
var name = document.querySelector("input[name='name']").value;
var pwd = document.querySelector("input[name='pwd']").value;
var email = document.querySelector("input[name='email']").value;
var mobile = document.querySelector("input[name='mobile']").value;
var captcha = document.querySelector("input[name='captcha']").value;
if(name == "" || name == null){
printError("nameErr", "用户名不能为空");
return false;
}
if(pwd == "" || pwd == null){
printError("pwdErr", "密码不能为空");
return false;
}
if(email == "" || email == null){
printError("emailErr", "邮箱不能为空");
return false;
}
if(mobile == "" || mobile == null){
printError("mobileErr", "手机号不能为空");
return false;
}
if(captcha == "" || captcha == null){
printError("captchaErr", "验证码不能为空");
return false;
}
}
// 获取验证码
function getCaptcha(){
var cap = Math.floor(Math.random()*10000).toString();
if(cap.length != 4) cap += "0";
captcha = cap;
document.getElementById("captcha").innerHTML = cap;
}
</script>
</body>
</html>

图:必填字段验证
数据格式验证
数据格式验证就是通过正则表达式来验证用户所填的数据,是否符要求,以邮箱地址为例,正确的邮箱地址中要包含一个 @ 和一个 . ,而且 @ 不能是邮箱地址的个字符,. 要出现在 @ 之后。示例代码如下:
运行结果如下:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
<style>
.error{
color: red;
}
label{
display: inline-block;
width: 70px;
text-align: right;
}
</style>
</head>
<body>
<form onsubmit="return validateForm()" action="" method="post">
<fieldset>
<legend>注册:</legend>
<div class="row">
<label>用户名:</label>
<input type="text" name="name">
<span class="error" id="nameErr"></span>
</div>
<div class="row">
<label>密码:</label>
<input type="password" name="pwd">
<span class="error" id="pwdErr"></span>
</div>
<div class="row">
<label>Email:</label>
<input type="text" name="email">
<span class="error" id="emailErr"></span>
</div>
<div class="row">
<label>手机号:</label>
<input type="text" name="mobile" maxlength="11">
<span class="error" id="mobileErr"></span>
</div>
<div class="row">
<label>验证码:</label>
<input type="text" name="captcha" maxlength="4"><span id="captcha" onclick="getCaptcha()"></span>
<span class="error" id="captchaErr"></span>
</div>
<div class="row">
<input type="submit" value="注册">
</div>
</fieldset>
</form>
<script>
var capCode = getCaptcha(); // 生成验证码
console.log(capCode);
// 清空 input 标签后的提示信息
var tags = document.getElementyTagName('input');
for (var i = 0; i < tags.length; i++) {
tags[i].onchange = function(){
var idname = this.name + "Err";
document.getElementById(idname).innerHTML = '';
}
}
// 显示错误消息
function printError(elemId, hintMsg) {
document.getElementById(elemId).innerHTML = hintMsg;
}
// 验证表单数据
function validateForm() {
// 获取表单元素的值
var name = document.querySelector("input[name='name']").value;
var pwd = document.querySelector("input[name='pwd']").value;
var email = document.querySelector("input[name='email']").value;
var mobile = document.querySelector("input[name='mobile']").value;
var captcha = document.querySelector("input[name='captcha']").value;
if(name == "" || name == null){
printError("nameErr", "用户名不能为空");
return false;
}
if(pwd == "" || pwd == null){
printError("pwdErr", "密码不能为空");
return false;
}
if(email == "" || email == null){
printError("emailErr", "邮箱不能为空");
return false;
} else {
var regex = /^\S+@\S+\.\S+$/;
if(regex.test(email) === false) {
printError("emailErr", "请输入正确的邮箱地址");
return false;
}
}
if(mobile == "" || mobile == null){
printError("mobileErr", "手机号不能为空");
return false;
} else {
var regex = /^[1]\d{10}$/;
if(regex.test(mobile) === false) {
printError("mobileErr", "您输入的手机号码有误");
return false;
}
}
if(captcha == "" || captcha == null){
printError("captchaErr", "验证码不能为空");
return false;
} else {
console.log(capCode);
console.log(captcha);
if(capCode != captcha){
printError("captchaErr", "验证码有误");
return false;
}
}
}
// 获取验证码
function getCaptcha(){
var cap = Math.floor(Math.random()*10000).toString();
if(cap.length != 4) cap += "0";
document.getElementById("captcha").innerHTML = cap;
return capCode = cap;
}
</script>
</body>
</html>

图:数据格式验证
- 随机文章
- 马尔代夫贾奴娃(马尔代夫前议长贾奴娃被判入狱15年)
- 中国 马尔代夫 合作(中马合作加深,双方携手共赢)
- 初夏马尔代夫图片(初夏的马尔代夫:美不胜收的风景照片)
- 马尔代夫警(马尔代夫警方开展行动打击走私贩毒活动)
- 帕劳马尔代夫旅游(探索帕劳马尔代夫:全球最美旅游胜地)
- 山东滨州马尔代夫(山东滨州推出媲美马尔代夫的旅游景点)
- 巴南 马尔代夫(后的:巴南青年赴马尔代夫游学)
- 沙特 马尔代夫(沙特与马尔代夫就合作项目达成协议)
- 江门马尔代夫旅游(江门到马尔代夫旅游攻略,必看推荐!)
- 去玩马尔代夫海滩(沉浸在马尔代夫美丽海滩上的绝佳体验)
- 缅甸马尔代夫身高(缅甸与马尔代夫:一个身高问题的比较)
- 茂名马尔代夫火车(茂名再添新世界——马尔代夫火车开通)
- 昆明马尔代夫领队(昆明旅行社赴马尔代夫领队火热招募中)
- 郑和雕像马尔代夫(郑和在马尔代夫落地生根,开创新时代)
- 舒淇马尔代夫写真(舒淇惊艳马尔代夫,性感写真大放送!)
- 哪里就有马尔代夫(探索马尔代夫:梦幻度假胜地在哪里?)
- 中药 带 马尔代夫(中医药走进马尔代夫,探寻海岛上的健康密码)
- 澳门马尔代夫旅游(澳门和马尔代夫的旅游攻略和美食推荐)
- 洛阳马尔代夫钓鱼(洛阳打造“马尔代夫钓鱼”旅游新热点)
- 美国马尔代夫位置(美国决定在马尔代夫设立重要外交基地)
- 火影忍者马尔代夫(火影忍者重温旧梦,马尔代夫度假之旅)
- 刘伟 马尔代夫(刘伟与马尔代夫:一段令人难忘的旅程)
- 马尔代夫亲子新岛(新开岛!马尔代夫推出亲子度假新地!)
- 马尔代夫上岛工具(马尔代夫岛屿探索必备:上岛工具推荐)
- 暑假 马尔代夫(重返马尔代夫,享受美轮美奂的暑假奢华体验)
- 青岛马尔代夫进球(青岛队绝杀对手,帮助球队豪取进球!)
- 叛逆 马尔代夫(马尔代夫风情:探索异域岛屿的神秘之旅)
- 马尔代夫住宿指南(马尔代夫度假酒店推荐:完美住宿指南)
- 马尔代夫为何出名(为什么马尔代夫是一个著名的目的地?)
- 马尔代夫台风图片(马尔代夫遭遇台风袭击,画面惊心动魄)
