js之表单校验

记录我学习的完整过程,需要者自行借鉴。

本文主要按模块讲解表单校验的原理,几种常见的js表单校验(非空、正则、限长、等值),只有先砌墙,才能装修。
下面的action="time.html"可以自行更改
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script>
function $(id) {
var Eid = document.getElementById(id);
return Eid;
}
function check() {
var Eusername = $("username");
if(Eusername.value == "") {
return false;
}
return true;
}
</script>
<body>
<form name="biaodang" action="time.html" οnsubmit="return check();">
<input id="username" type="text" name="name" id="id" />
<input type="submit" value="提交" />
</form>
</body>
</html>
总结:校验实现的关键是οnsubmit="return check();中check()的返回的bool值,true则通过,false反之。function $(id) 中$只是函数名( 命名来自网络,觉得好用就跟着用)

非空校验无法满足各种形形色色的需求,所以进一步使用正则表达式来校验。下例子为中文校验

function check() {
var Eusername = $("username");
var username=Eusername.value.trim();
if(username == "") {
return false;
}else if(!reg.test(username))//校验中文,如果是中文返回false
{
return false;
}
return true;
}
在表单校验中的需求
例如用户名、密码等等的长度有限制
function check() {
var Eusername = $("username");
var username = Eusername.value.trim();
var length=username.length;
if(username == "") {
return false;
} else if(length>3) //用户名非空、长度不能大于3
{
return false;
}
return true;
}

密码与确认密码必须一致
function check() {
var Epassword = $("password");
var password = Epassword.value;
var Erepassword = $("repassword");
var repassword = Erepassword.value;
if(password == "") {
return false;
} else if(password!=repassword) //密码与确认密码必须一致
{
return false;
}
return true;
}
在熟悉以上基础的校验后,必须学会整合整个表单的校验,在此贴上本人的一次实验题,效果如下图所示:
代码如下:
<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8">
		<title>lailai的js表单校验(一)</title>
	</head>
	<script>
		//id选择器
		function $(id) {
			var Eid = document.getElementById(id);
			return Eid;
		}
		//校验主函数
		function check() {
			if(!checkUsername()) {
				return false;
			}
			if(!checkPassword()) {
				return false;
			}
			if(!checkRepassword()) {
				return false;
			}
			if(!checkEmail()) {
				return false;
			}
			if(!checkAccept()) {
				return false;
			}
			return true;
		}
		//校验用户名由字母开头,后跟字母、数字、或者下划线!
		function checkUsername() {
			var Eusername = $("username");
			var username = Eusername.value.trim();
			var sername = username.slice(1);
			//alert(sername);
			if(username == "") {
				return false;
			} else if(/^[0-9]{1,20}$/.test(username[0])) {
				return false;
			} else if((!/^\w+$/.test(sername)) && username.length > 1) {
				return false;
			}
			return true;
		}
		//校验设置登入密码至少6位!
		function checkPassword() {
			var Epassword = $("password");
			var password = Epassword.value;
			var length = password.length;
			if(password == "") {
				return false;
			} else if(length <= 6) //密码长度必须大于6位
			{
				return false;
			}
			return true;
		}
		//校验 重复密码输入与密码值相同
		function checkRepassword() {
			var Epassword = $("password");
			var password = Epassword.value;
			var Erepassword = $("repassword");
			var repassword = Erepassword.value;
			//alert(password);
			//alert(repassword);
			if(password != repassword) //密码与确认密码必须一致
			{
				return false;
			}
			return true;
		}
		//校验邮箱格式
		function checkEmail() {
			var Eemail = $("email");
			var email = Eemail.value.trim();
			if(email == "") {
				return false;
			} else if(!/^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g.test(email)) //校验是否为有效邮箱
			{
				return false;
			}
			return true;
		}
		//校验用户协议被勾选
		function checkAccept() {
			var Eaccept = $("accept");
			if(!Eaccept.checked) {
				return false;
			}
			return true;
		}
	</script>

	<body>
		<div>
			<h1 align="center" style="color: cornflowerblue;">用户注册</h1>
			<form name="form" action="time.html" οnsubmit="return check();">
				<table border="1px" align="center">
					<tr>
						<td align="right"><strong>用户名:*</strong> <input type="text" id="username" name="username" maxlengtd="" size="6" value="" style="width: 150px;" /></td>
						<td>用户名由字母开头,后跟字母、数字、或者下划线!</td>
					</tr>
					<tr>
						<td align="right"><strong>密码:*</strong><input type="password" id="password" name="password" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
						<td>设置登入密码至少6位!</td>
					</tr>
					<tr>
						<td align="right"><strong>确认密码:*</strong><input type="password" id="repassword" name="repassword" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
						<td>
							请再次输入你的密码!</td>
					</tr>
					<tr>
						<td align="center" colspan="2"><strong>性别:*</strong><input type="radio" name="sex" checked="checked" />男<input type="radio" name="sex" />女</td>

					</tr>
					<tr>
						<td><strong>邮箱地址:*</strong><input type="text" id="email" name="email" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
						<td>请填写您的常用邮箱,可以 用此邮箱找回密码!</td>
					</tr>
					<tr>
						<td colspan="2" align="center"><strong>基本情况:*</strong><textarea name="info" rows="" cols=""></textarea></td>
					</tr>
					<tr>
						<td colspan="2" align="center"><input type="checkbox" id="accept" name="sex" checked="checked" /> 我已经仔细阅读并同意接受用户使用协议
						</td>

					</tr>
					<tr>
						<td align="center"><input type="submit" value="确认" /><br /> </td>
						<td align="center"><input type="reset" value="取消" /><br /></td>
					</tr>

				</table>
			</form>
		</div>
	</body>

</html>
 

以上的不足之处:我实现的是一次提交,校验全部校验项,如果符合全部要求则,跳转到time.html,否则拒绝提交。这样的用户体验
不够好,需要一项一项进行校验并给出错误提示。
代码:
<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8">
		<title>lailai的js表单校验(二)</title>
		<link rel="stylesheet" href="css/checkInfo.css" />
	</head>
	<script>
		//id选择器
		function $(id) {
			var Eid = document.getElementById(id);
			return Eid;
		}
		//校验主函数
		function check() {
			if(!checkUsername()) {
				return false;
			}
			if(!checkPassword()) {
				return false;
			}
			if(!checkRepassword()) {
				return false;
			}
			if(!checkEmail()) {
				return false;
			}
			if(!checkAccept()) {
				return false;
			}
			return true;
		}
		//校验用户名由字母开头,后跟字母、数字、或者下划线!
		function checkUsername() {
			var Eusername = $("username");
			var username = Eusername.value.trim();
			var sername = username.slice(1);
			if(username == "") {
				return false;
			} else if(/^[0-9]{1,20}$/.test(username[0])) {
				return false;
			} else if((!/^\w+$/.test(sername)) && username.length > 1) {
				return false;
			}
			return true;
		}
		//校验设置登入密码至少6位!
		function checkPassword() {
			var Epassword = $("password");
			var password = Epassword.value;
			var length = password.length;
			if(password == "") {
				return false;
			} else if(length <= 6) //密码长度必须大于6位
			{
				return false;
			}
			return true;
		}
		//校验 重复密码输入与密码值相同
		function checkRepassword() {
			var Epassword = $("password");
			var password = Epassword.value;
			var Erepassword = $("repassword");
			var repassword = Erepassword.value;
			if(password != repassword) //密码与确认密码必须一致
			{
				return false;
			}
			return true;
		}
		//校验邮箱格式
		function checkEmail() {
			var Eemail = $("email");
			var email = Eemail.value.trim();
			if(email == "") {
				return false;
			} else if(!/^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g.test(email)) //校验是否为有效邮箱
			{
				return false;
			}
			return true;
		}
		//校验用户协议被勾选
		function checkAccept() {
			var Eaccept = $("accept");
			EusernameInfo = $("accept_info");
			if(!Eaccept.checked) {
				EusernameInfo.className = "error_prompt";
				return false;
			}
			return true;
		}
	</script>
	<script>
		function username_onfocus() {
			EusernameInfo = $("username_info");
			EusernameInfo.innerHTML = "用户名由字母开头,后跟字母、数字、或者下划线!";
			EusernameInfo.className = "import_prompt";
		}

		function username_onblur() {
			if(!checkUsername()) {
				EusernameInfo.className = "error_prompt";
			}
		}

		function password_onfocus() {
			EpasswordInfo = $("password_info");
			EpasswordInfo.innerHTML = "设置登入密码至少6位!";
			EpasswordInfo.className = "import_prompt";
		}

		function password_onblur() {
			if(!checkPassword()) {
				EpasswordInfo.className = "error_prompt";
			}
		}

		function repassword_onfocus() {
			ErepasswordInfo = $("repassword_info");
			ErepasswordInfo.innerHTML = "请再次输入你的密码!";
			ErepasswordInfo.className = "import_prompt";
		}

		function repassword_onblur() {
			if(!checkRepassword()) {
				ErepasswordInfo.className = "error_prompt";
			}
		}

		function email_onfocus() {
			EemailInfo = $("email_info");
			EemailInfo.innerHTML = "请填写您的常用邮箱,可以 用此邮箱找回密码!";
			EemailInfo.className = "import_prompt";
		}

		function email_onblur() {
			if(!checkEmail()) {
				EemailInfo.className = "error_prompt";
			}
		}
	</script>

	<body>
		<div>
			<h1 align="center" style="color: cornflowerblue;">用户注册</h1>
			<form name="form" action="time.html" οnsubmit="return check();">
				<table border="1px" align="center">
					<tr>
						<td align="right"><strong>用户名:*</strong> <input type="text" id="username" name="username" οnfοcus="username_onfocus()" οnblur="username_onblur()" maxlengtd="" size="6" value="" style="width: 150px;" /></td>
						<td>
							<div id="username_info"></div>
						</td>
					</tr>
					<tr>
						<td align="right"><strong>密码:*</strong><input type="password" id="password" name="password" οnfοcus="password_onfocus()" οnblur="password_onblur()" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
						<td>
							<div id="password_info"></div>
						</td>
					</tr>
					<tr>
						<td align="right"><strong>确认密码:*</strong><input type="password" id="repassword" οnfοcus="repassword_onfocus()" οnblur="repassword_onblur()" name="repassword" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
						<td>
							<div id="repassword_info"></div>
						</td>
					</tr>
					<tr>
						<td align="center"><strong>性别:*</strong><input type="radio" name="sex" checked="checked" />男<input type="radio" name="sex" />女</td>
						<td><strong>基本情况:*</strong><textarea name="info" rows="" cols=""></textarea></td>
					</tr>
					<tr>
						<td><strong>邮箱地址:*</strong><input type="text" id="email" name="email" οnfοcus="email_onfocus()" οnblur="email_onblur()" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
						<td>
							<div id="email_info"></div>
						</td>
					</tr>
					<tr>
						<td colspan="2" align="center"><input type="checkbox" id="accept" name="sex" checked="checked" />
							<div id="accept_info" style="display: inline-block;">我已经仔细阅读并同意接受用户使用协议</div>
						</td>

					</tr>
					<tr>
						<td align="center"><input type="submit" value="确认" /><br /> </td>
						<td align="center"><input type="reset" value="取消" /><br /></td>
					</tr>

				</table>
			</form>
		</div>
	</body>

</html>
其中引入的css文件  checkInfo.css  代码如下
		/*当鼠标放到文本框时,提示文本的样式*/
		
		.import_prompt {
			border: solid 1px #ffcd00;
			background-color: #ffffda;
			padding-left: 5px;
			padding-right: 5px;
			line-height: 20px;
		}
		/*当文本框内容不符合要求时,提示文本的样式*/
		
		.error_prompt {
			border: solid 1px #ff3300;
			background-color: #fff2e5;
			background-repeat: no-repeat;
			background-position: 5px 2px;
			padding: 2px 5px 0px 25px;
			line-height: 20px;
		}

效果如下图:


       至此,对于js的表单手写验证到此为止,接下来时间允许的话,笔者会往插件方向涉及,感兴趣的朋友关注我,文章还在继续编写中。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值