辛苦老师检查,这样可行吗
来源:4-8 编程练习
Lanny_Chung
2020-05-27 19:43:50
<!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="^(\d{15}||\d{17}[0-9xX])$"><span class="tips"></span>
</li>
<li class="change">
<span class="toRight">邮箱:</span><input type="text" name="email" title="^[a-zA-Z0-9]+@[\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[0-3|5-9]|8[0|2|5-9]|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 (tips[0].innerHTML!=="ok" || tips[1].innerHTML!=="ok" || tips[2].innerHTML!=="ok" || tips[3].innerHTML!=="ok" || tips[4].innerHTML!=="ok" || tips[5].innerHTML!=="ok" || tips[6].innerHTML!=="ok") {
alert("请输入注册信息");
for(var k in newErrors){
sum++;
tips[sum].innerHTML=newErrors[k];
}
tips[2].innerHTML="请输入密码";
}else{
alert("验证成功");
}
}
</script>
</body>
</html>1回答
同学你好,代码中有如下问题:
1. 身份证的正则表达式,15位和18位之间的“|”写一个就行,同学写了两个,可以去掉一个,如下:

2. 如果有一项验证不通过,点击“提交”按钮时,会将验证通过的项的提示文字“ok”更改成提交不成功时的提示文字,如下:

此时即使将剩下几项都填写正确,让它们的提示文字变成“ok”,但由于之前验证通过的项的提示文字不是“ok”,不满足如下条件:

所以还是无法提交表单。
建议更改提交时的验证条件,可以给每一项都设置一个标志变量,记录该项验证是否通过,然后通过这些标志变量来判断是否可以提交。另外“verification”这个变量,也没有实际使用上,可以去除。可以参考如下:



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