辛苦老师检查下
来源: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回答
同学你好,代码中问题如下:
1. 身份证号码不允许输入15位:
建议更改正则,如下:
2. 邮箱不允许数字开头:
建议更改正则,如下:
3. 手机号“154”开头,也会验证通过,建议修改正则:
4. 只要最后输入的项验证通过,就会提交成功,如下:
原因是表单触发blur事件时,会对内容进行验证,验证通过就会更改“verification”的值为true,所有表单验证时,都会更改该变量,所以不论前几项验证是否通过,只要最后输入项验证通过,“verification”的值就为true,点击提交时,就会提示“验证通过”。
建议给每一项都添加一个变量,记录当前项是否验证通过,提交时,只要有一项不通过,就不允许提交,该功能可参考这位同学的实现:https://class.imooc.com/course/qadetail/223542
如果我的回答帮到了你,欢迎采纳,祝学习愉快!
相似问题