4-8编程题邮箱验证问题

4-8编程题邮箱验证问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>正则表达式编程题</title>
        <style type="text/css">
            body{
                background: #F0F0F0;
                color: dimgrey;
                font-family: "宋体";
            }
            .reg{
                width: 100%;
                height: 50px;
                color: white;
                background: dodgerblue;
                text-indent: 1.5em;
                line-height: 50px;
                font-size: 20px;
            }
            .wrap{
                width: 60%;
                margin: 50px auto;
                line-height: 40px;
            }
            .txt_left{
                text-align: right;
                width: 100px;
                display: inline-block;
                margin-left: 400px;
            }
            .txt_right{
                color: red;
            }
            .txtRight{
                color: red;
            }
            select{
                width: 173px;
                height: 21px;
                color: dimgrey;
            }
            #btn{
                width: 80px;
                height: 40px;
                background: royalblue;
                color: white;
                border: none;
                border-radius: 10px;
                outline: none;
                margin-top: 50px;
                margin-left: 550px;
            }
        </style>
    </head>
    <body>
        <div class="reg">用户注册</div>
        <div id="wrap" class="wrap">
            <span class="txt_left">用户名:</span>
            <input type="text" id="0" class="ipt" />
            <span class="txt_right submit"></span>
            <br />
            <span class="txt_left">登录密码:</span>
            <input type="text" id="1" class="ipt" />
            <span class="txt_right submit"></span>
            <br />
            <span class="txt_left">确认密码:</span>
            <input type="text" id="passwdConfirm" />
            <span class="txtRight submit" id="txtRight"></span>
            <br />
            <span class="txt_left">姓名:</span>
            <input type="text" id="2" class="ipt" />
            <span class="txt_right submit"></span>
            <br />
            <span class="txt_left">性别:</span>
            <select>
                <option value="male">男</option>
                <option value="female">女</option>
            </select>
            <span style="opacity: 0.01;">OK</span>
            <br />
            <span class="txt_left">身份证号码:</span>
            <input type="text" id="3" class="ipt" />
            <span class="txt_right submit"></span>
            <br />
            <span class="txt_left">邮箱:</span>
            <input type="text" id="4" class="ipt" />
            <span class="txt_right submit"></span>
            <br />
            <span class="txt_left">手机号码:</span>
            <input type="text" id="5" class="ipt" />
            <span class="txt_right submit"></span>   
            <br />
            <button id="btn">提交</button>
        </div>
        <script type="text/javascript">
            var inputBoxs=document.getElementsByClassName('ipt');
            var txts_right=document.getElementsByClassName('txt_right');
            var passwdConfirm=document.getElementById('passwdConfirm');
            var txtRight=document.getElementById('txtRight');
            var btn=document.getElementById('btn');
            var len=inputBoxs.length;
            var flag=false;
            var submits=document.getElementsByClassName('submit');
            var len2=submits.length;
            //定义一个数组来存放正则表达式
            var patterns=[
                /^[a-zA-Z]\w{5,19}$/i,
                /^[^\s]{3,18}$/i,
                /^[\u4e00-\u9fa5]{2,4}$/,
                /^(?:\d{15}|\d{17}x|\d{18})$/,
                /^[a-zA-Z0-9]+(?:[.-_][a-zA-Z0-9]+)*@(?:[\w]+\.)+[a-zA-Z]{2,3}$/,
                /^1\d{10}$/
            ];
            //定义一个数组来存放输入错误提示
            var mistakes=[
                '6-20位字母、数字或“_”,字母开头',
                '3-18位,包含数字,字母或符号,中间不能有空格',
                '真实姓名为两位到四位的中文',
                '请输入正确的身份证号码',
                '邮箱格式不正确',
                '电话号码不正确'
            ]
            for(var i=0;i<len;i++){
                inputBoxs[i].onblur=function(){
                    if(patterns[this.id].test(this.value)){
                        txts_right[this.id].innerHTML='OK';
                        flag=true;
                    }else{
                        txts_right[this.id].innerHTML=mistakes[this.id];
                    }
                     
                }
            }
            passwdConfirm.onblur=function(){
                if(this.value==''){
                    txtRight.innerHTML='请输入密码!';
                }else if(this.value!=null&&this.value==inputBoxs[1].value){
                    txtRight.innerHTML='OK';
                }else{
                    txtRight.innerHTML='两次输入密码不一致';
                }
            }
            btn.onclick=function(){
                for(var i=0;i<len2;i++){
                    if(submits[i].innerHTML!='OK'){
                        flag=false;
                    }
                }
                if(flag){
                    alert("验证成功!");
                }else{
                    alert("信息未完善!")
                }
            }
        </script>
    </body>
</html>

为什么我在邮箱栏输入“”123-123@qq.com“”匹配不到,而我把‘-’换成‘_’或者‘.’,都能够匹配

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕星星 2018-10-21 15:45:10

经测试-在前面或者是后面都是可以完成验证的呢,也就是[-._】和[._-],(.和_的位置任意),但是当-在中间时,可能会被当成连接符,可以使用\来转义一下:

http://img1.sycdn.imooc.com//climg/5bcc2e190001fadd00770031.jpghttp://img1.sycdn.imooc.com//climg/5bcc2e10000171d402390040.jpg

自己可以再测试一下。

丛从绿草 2018-10-14 20:48:03

var formbox = document.getElementById('formbox');

var pwd1 = "";

var forms ={

getElementsByClassName:function (str){

var searchClass = str.searchClass;//存储要查找的类名

var node = str.node|| document;//存储要查找的范围

var tag = str.tag||'*';//存储一定范围内要查找的标签

var result = [];

// 判断浏览器不支持getElementsByClassName方法

if(document.getElementsByClassName){ //如果浏览器支持

var nodes = node.getElementsByClassName(searchClass)

if(tag !=='*'){

for(var i=0;node=nodes[i++];){

if(node.tagName === tag.toUpperCase()){

result.push(node);

}

}

}else{

result = nodes;

}

return result;

}else{ //使IE8以下的浏览器能够支持该属性

var els = node.getElementsByTagName(tag);

var elsLen = els.length;

var i,j;

var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");

for(i = 0,j=0;i<elsLen;i++){

if(pattern.test(els[i].className)){  //检测正则表达式

result[j] = els[i];

j++;

}

}

return result;

}

}

// 获取inputs类

var inputs = forms.getElementsByClassName({

searchClass:'inputs',

node:document

})

// 获取textboxGroup类

var textboxGroup = forms.getElementsByClassName({

searchClass:'textbox-group',

node:document

})

// 获取tips类

var tips = forms.getElementsByClassName({

searchClass:'tips',

node:document

})

// 获取rights类

var rights = forms.getElementsByClassName({

searchClass:'rights',

node:document

})

// 获取点击按钮

var btns = forms.getElementsByClassName({

searchClass:'btn',

node:document

})

// 正则条件

var regular = {

// 6-20位字母、数字或“_”,字母开头

'users':/^[a-zA-Z]{1}[\w+]{2,19}$/,

// 密码6-18位,包括数字字母或符号,中间不能有空格

'pwd':/^[\S]{6,18}$/,

// 是真是姓名,两位到四位的中文汉字

'chineseNames':/^[\u4e00-\u9fa5]{2,4}$/,

// 验证身份证号 15位或者18位的数字,18位时最后一位可能是x

'idCard':/^[1-9]{1}[\d]{14}$|^[1-9]{1}[\d]{16}([0-9]|[xX])$/,

// 验证邮箱、12323@qq.com、lulu_s@open.com、lu_lu_z@qq.com.cn等

'email':/^[a-z1-9]+(?:[._-][a-z0-9]+)*@([a-z0-9])+(?:[._-][a-z0-9]+)*\.[a-z]{2,4}$/i,

// 验证手机号码

'telphone':/^1(3|4|5|7|8)\d{9}$/

}

// 错误提示信息

var errorInfo =[

'6-20位字母、数字或“_”,字母开头',

'请输入密码,不能除了空格之外',

'两次输入密码不一致',

'两位到四位的中文汉字',

'要求15位或者18位的数字',

'请输入正确的邮箱',

'手机号码应为11位数字,以13/14/15/17/18开头'

]

// 兼容事件

var EventUtil = {

addEvent:function(ele,type,handler){

if(ele.addEventListener){

ele.addEventListener(type,handler,false);

}else if(ele.attachEvent){

ele.attachEvent('on' + type,handler);

}

}

}

// 循环input数组

function each(array,fn){

for(var i=0;i<array.length;i++){

fn(i,array[i]);

}

}

// 遍历失去焦点事件

each(inputs,function(index,ele){

EventUtil.addEvent(ele,'blur',function(){

work.disInformation(ele,index);

});

})

// 核心计算

var work ={

disInformation:function (ele,index){

if(work.tureFlase(ele,index)){

tips[index].innerHTML = 'OK';

}else{

ele.value ="";

tips[index].innerHTML = errorInfo[index];

}

},

// 判断正则,返回true或false;

tureFlase:function (ele,index){

switch(index){

case 0:return regular.users.test(ele.value);

break;

case 1:pwd1 = ele.value;work.judgepwd(index,pwd1); return regular.pwd.test(ele.value);

break;

case 2:return ele.value === pwd1 && pwd1!="";

break;

case 3:return regular.chineseNames.test(ele.value);

break;

case 4:return regular.idCard.test(ele.value);

break;

case 5:return regular.email.test(ele.value);

break;

case 6:return regular.telphone.test(ele.value);

break;

}

},

// 当两次密码成功输入时,重新修改登录密码,重新判断;

judgepwd:function (index,pwd1){

index++;

if(inputs[index].value === pwd1){

return;

}else{

tips[index].innerHTML = errorInfo[index];

}

}

}

// 点击按钮校验表单

EventUtil.addEvent(btns[0],'click',function(){

var i = 0,len = inputs.length;

each(inputs,function(index,ele){

if(!ele.value==''){

i++;

if(i == len){

alert('提交成功');

}

}else if(ele.value==''){

tips[index].innerHTML = errorInfo[index];

}

})

})


丛从绿草 2018-10-14 20:47:43

谢谢你这里有一段代码,我借鉴了就是错误信息用数组来包裹,我之前是建标签,走了弯路。,要不要我给你代码,我这写的很完善,修复了各种bug。

  • 提问者 qq_林二爷_0 #1
    其实我就是邮箱的正则验证时有点问题,不知道为什么[-._]里面把“-”放在后面,就会验证失败。比如说[_.-]或者[._-].
    2018-10-20 16:53:18
好帮手慕糖 2018-10-14 10:21:55

你好,建议:如下,可以把”-“放在第一个位置。

http://img1.sycdn.imooc.com//climg/5bc2a81b00011c9506120034.jpg

若能帮助到你,望采纳。

祝学习愉快!

  • 提问者 qq_林二爷_0 #1
    为什么要把“-”放在第一个位置?
    2018-10-20 16:46:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码