正则表达式的练习题,用户表单

来源:4-8 编程练习

慕前端2185815

2020-12-25 17:52:25

# 具体遇到的问题

1、点击按钮后弹出框的提示都是提交成功,没有请填写完整呢?

2、只填写用户名后,点击按钮,提示框为什么都是ok

3、如何设置提交成功后,页面初始化

# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <title>正则表达式的特殊字符</title>

    <style type="text/css">

    *{

    padding:0;

    margin:0;

    }


    h1{

    height:80px;

    background-color:#a94867;

    color:#fff;

    line-height:80px;

    text-indent:20px;

    }

   

   

    h2{

    width:650px;

    height:30px;

    text-align:center;

    margin:10px auto;

    }

    .text{

    display:inline-block;

   

    text-align:right;

    font-size:20px;

    width:100px;

    vertical-align: center;

    line-height:30px;


    }

    input{

    width:200px;

    height:20px;

    vertical-align: center;

     

    }

    select{

    width:204px;

    height:24px;

    vertical-align: center;

     

    }

    .matchResult{

    display:inline-block;

    height:30px;

    width:300px;

    line-height:30px;

    vertical-align: center;

    text-indent:10px;

    color:#f01400;

    font-size:14px;

    /*background-color:#a94867;*/

    }

   

    #btn{

    width:60px;

    height:40px;

   

    margin:10px auto;

    line-height:40px;

    background-color:#a94867;

    color:#fff;

   

    border-radius:5px;

    }

    #btn:hover{

    box-shadow: 0 0 5px 0 #eee;

    }



    </style>

</head>

<body>

<h1>用户注册</h1>

    <h2><span class="text">用户名:</span><input type="text" name="username" id="username" title="^[a-zA-Z]\w{5,19}$"><span class="matchResult " title="6-20位字母、数字或下划线,字母开头"></span></h2>

    <h2><span class="text">登录密码:</span><input type="password" name="pwd1" id="pwd1" title="^\S{6,18}$"><span class="matchResult " title="6-18位,数字字母或符号,不能有空格。"></span></h2>

    <h2><span class="text">确认密码:</span><input type="password" name="pwd2" id="pwd2"><span class="matchResult " title="两次输入密码不一致"></span></h2>

    <h2><span class="text">姓名:</span><input type="text" name="name" id="name" title="^[\u4e00-\u9fa5]{2,4}$"><span class="matchResult " title="真实姓名,两位到四位的中文汉字"></span></h2>

    <h2><span class="text">性别:</span>

    <select id="sex">

    <option value='man' selected="selected">男</option>

    <option value='woman'>女</option>

    </select>

    <span class="matchResult "></span></h2>

    <h2><span class="text">身份证号:</span><input type="text" name="ID" id="ID" title="^\d{15}|\d{18}$"><span class="matchResult" title="15位或者18位的数字"></span></h2>

    <h2><span class="text">邮箱:</span><input type="text" name="email" id="email" title="^\w+@(?:[a-zA-Z]+\.)+[a-zA-Z]+$"><span class="matchResult " title="邮箱格式有误"></span></h2>

    <h2><span class="text">手机号码:</span><input type="text" name="tel" id="tel" title="^(1(3|(5(?!4))|(8(?![134])))(\d{8}))|(147\d{9})$"><span class="matchResult " title="号码有误"></span></h2>


    <h2><input type="button" name="btn" value="提交" id="btn"></h2>


<script type="text/javascript">

  

    var box = {

    username   :byId('username'),

    pwd1       :  byId('pwd1'),

    pwd2       :byId('pwd2'),

    name       :byId('name'),

    ID         :byId('ID'),

    email      :byId('email'),

    tel        :byId('tel')    

    }

    var elems={

    btn        :byId('btn')

    }


    //获取元素的方法

   function byId(elem){

    return document.getElementById(elem);

   }

   //查找下一个兄弟节点的方法

   function getNextElementSibling(node){

    var o = node;

    while(o.nextSibling!==null){

    if (o.nextSibling.nodeType==1){

           return o.nextSibling;

    }

    o=o.nextSibling;

    }

   }

   //元素添加失焦事件的方法

   function setOnblur(elem){

   

    elem.onblur=function(){

    var pattern = new RegExp(this.title,'g');

    if(pattern.test(this.value)){

    getNextElementSibling(this).innerHTML ='OK ';

    }else{

    getNextElementSibling(this).innerHTML =getNextElementSibling(this).title ;

    }


    }


   }

   //两次密码验证的方法

   function setOnblurPasswordVertify(elem){

    elem.onblur=function (){

    if(this.value==''){

    getNextElementSibling(this).innerHTML='请输入确认密码';

    }

    else if(this.value!==pwd1.value){

    getNextElementSibling(this).innerHTML=getNextElementSibling(this).title;

    }else if(this.value==pwd1.value){

    getNextElementSibling(this).innerHTML='OK';

    }

    }

   }


   //点击按钮验证内容的方法

   function setVertifyBtn(btn){

    var num=0;

    var arr = Object.keys(box);

       btn.onclick=function(){

        for(k in box){

        var pattern = new RegExp(box[k].value,"g");

        if(box[k]!='pwd2'){

        if(pattern.test(box[k].value)){

             getNextElementSibling(box[k]).innerHTML ='OK ';

             num++;

            }else{

               getNextElementSibling(box[k]).innerHTML =getNextElementSibling(box[k]).title ;


            }


        }else{

        if(box[k].value==''){

             getNextElementSibling(box[k]).innerHTML='请输入确认密码';

            }else if(box[k].value!==pwd1.value){

             getNextElementSibling(box[k]).innerHTML=getNextElementSibling(box[k]).title;

            }else if(box[k].value==pwd2.value){

             getNextElementSibling(box[k]).innerHTML='OK';

             num++;

            }


        }

       

        }


        if(num==arr.length){

        alert('提交成功');

       

        return;

        }else{

        alert('请填写完整');

        }



       }

   }

   

   

   for( k in box){

    if(k!='pwd2'){

      setOnblur(box[k]);

    }else{

    setOnblurPasswordVertify(box[k]);

    }

   }

   

   setVertifyBtn(elems.btn);

 

   

 



</script>

</body>

</html>



写回答

1回答

好帮手慕久久

2020-12-25

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

1、不填任何信息,点击提交按钮时,会提示提交成功。原因是通过box[k].value无法获取到真正的正则表达式,正则表达式位于input元素的title属性上,如下:

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

通过box[k].value获取到的正则形式如下:

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

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

该正则可以匹配到空格,如下:

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

所以即使不输入内容,也能验证通过,因此弹出成功。可做如下修改:

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

2、上述调整后,点击提交按钮,确认密码后面的提示信息不对:

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

原因是如下判断不对(dom元素与字符串pwd2不相等):

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

应该使用k来判断,修改如下:

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

这样调整后,只填写用户名,提示信息就正确了。

3、身份证输入如下形式也正确:

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

原因是正则表达式书写不对,可做如下修改:

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

4、如果提交成功后,想清空提示信息,可参考如下方案:

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

5、建议把var num = 0;写在点击事件的处理函数中,即每次点击都把num清零。否则每次点击按钮,num值都会记录上一次的结果,然后继续计算:

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

祝学习愉快!

0

0 学习 · 14456 问题

查看课程