辛苦老师检查下

来源:4-8 编程练习

Lanny_Chung

2020-05-24 22:09:02

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
	<title>正则表达式</title>
	<style type="text/css">
		*{
			margin: 0;
			padding: 0;
		}
		.container{
			width: 800px;
			height: 600px;
			margin: 0 auto;
			background-color: #eee;
			border-radius: 3px;
		}
		.nav{
			height: 40px;
			line-height: 40px;
			font-size: 16px;
			text-indent: 1em;
			color: #fff;
			background-color:#3092D1; 
		}
		section{
			margin-left: 200px;
		}
		ul{
			list-style-type: none;
			margin-top: 40px;
		}
		ul>li{
			height: 40px;
		}
		.toRight{
			display: inline-block;
			text-align: right;
			width: 100px;
			color:#656565;
		}
		input,select{
			width:160px;
			text-align: left;
		}
		div{
			width: 80px;
			height: 40px;
			line-height: 40px;
			margin:60px 0 0 130px;
			background-color: #3082d1;
			text-align: center;
			border-radius: 5px;
			cursor: pointer;
			color:#fff;
		}
		.tips{
			margin-left: 10px;
			color:red;
			font-size: 12px;
		}
	</style>
</head>
<body>
	<article class="container">
		<nav class="nav">用户注册</nav>
		<section>
			<ul>
				<li class="change">
					<span class="toRight">用户名:</span><input class="userName" type="text" name="userName" title="^[a-zA-Z]\w{5,19}$"><span class="tips"></span>
				</li>
				<li class="change">
					<span class="toRight">登录密码:</span><input class="password1" type="password" name="password1" title="^\S{6,18}$"><span class="tips"></span>
				</li>
				<li class="change">
					<span class="toRight">确认密码:</span><input class="password2" type="password" name="password2"><span class="tips"></span>
				</li>
				<li class="change">
					<span class="toRight">姓名:</span><input type="name" name="name" title="^[\u4e00-\u9fa5]{2,4}$"><span class="tips"></span>
				</li>
				<li>
					<span class="toRight">性别:</span>
					<select class="sex">
						<option selected>男</option>
						<option>女</option>
						<option>保密</option>
					</select>
				</li>
				<li class="change">
					<span class="toRight">身份证号码:</span><input type="text" name="idCard" title="^[1-9]\d{16}[\dx]$"><span class="tips"></span>
				</li>
				<li class="change">
					<span class="toRight">邮箱:</span><input type="text" name="email" title="^[a-zA-Z]+\w+@[\w]+\.([a-zA-Z]){2,6}$"><span class="tips"></span>
				</li>
				<li class="change">
					<span class="toRight">手机号码:</span><input type="text" name="phone" title="^1(?:3[\d]|5[\d]|8[\d]|47)\d{8}$"><span class="tips"></span>
				</li>
			</ul>
			<div class="btn">提交</div>
		</section>
	</article>
	<script type="text/javascript">
		var lists=document.querySelectorAll(".change"),
			tips=document.querySelectorAll(".tips"),
			userName=document.querySelector(".userName"),
			password1=document.querySelector(".password1"),
			password2=document.querySelector(".password2"),
			newErrors={
				userName:"6-20位字母、数字或“_”,字母开头",
				password1:"6-18位,包括数字字母或符号,中间不能有空格",
				password2:"两次输入密码不一致",
				name:"真实姓名,两位到四位的中文汉字",
				idCard:"请填写正确的18位身份证号码",
				email:"邮箱格式不正确",
				phone:"电话号码不正确"
			},
			verification,
			btn=document.querySelector(".btn");
		for(var i=0;i<lists.length;i++){
			lists[i].addEventListener("blur",function(){
				if (this.children[1].value.search(this.children[1].title)!=-1) {
					this.children[2].innerHTML="ok";
					verification=true;
				}else{
					this.children[2].innerHTML=newErrors[this.children[1].name];
					verification=false;
				}
				if (this.children[1].name=="password2" && password1.value!=password2.value) {
					tips[2].innerHTML=newErrors.password2;
				}
			},true)
		}
		btn.onclick=function(){
			var sum=-1;
			if (verification) {
				alert("验证成功");
			}else{
				for(var k in newErrors){
					sum++;
					tips[sum].innerHTML=newErrors[k];
				}
				tips[2].innerHTML="请输入密码";
			}
		}
	</script>
</body>
</html>


写回答

1回答

好帮手慕久久

2020-05-25

同学你好,代码中问题如下:

1. 身份证号码不允许输入15位:

http://img.mukewang.com/climg/5ecb456d09c30f7705540056.jpg

建议更改正则,如下:

http://img.mukewang.com/climg/5ecb45780901c43c42580317.jpg

2. 邮箱不允许数字开头:

http://img.mukewang.com/climg/5ecb4584097bc1c904880048.jpg

建议更改正则,如下:

http://img.mukewang.com/climg/5ecb458c09a1004f36600229.jpg

3. 手机号“154”开头,也会验证通过,建议修改正则:

http://img.mukewang.com/climg/5ecb4595091d3c4d24360193.jpg

4. 只要最后输入的项验证通过,就会提交成功,如下:

http://img.mukewang.com/climg/5ecb45b609a313f705540254.jpg

原因是表单触发blur事件时,会对内容进行验证,验证通过就会更改“verification”的值为true,所有表单验证时,都会更改该变量,所以不论前几项验证是否通过,只要最后输入项验证通过,“verification”的值就为true,点击提交时,就会提示“验证通过”。

建议给每一项都添加一个变量,记录当前项是否验证通过,提交时,只要有一项不通过,就不允许提交,该功能可参考这位同学的实现:https://class.imooc.com/course/qadetail/223542

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

0

0 学习 · 14456 问题

查看课程