JavaScript实现表单的校验以及匹配正则表达式

运行效果:

未填写信息报错:

匹配正则表达式:

 

信息校验无误:

源代码如下:

  1 <!DOCTYPE html>
  2 <html lang="zh">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>用户注册</title>
  6     <!--<link rel="stylesheet" type="text/css" href="style/index.css"/>-->
  7 </head>
  8 <style type="text/css">
  9     body {
 10         margin-top: 20px;
 11     }
 12 
 13     .box {
 14         font-size: 13px;
 15         margin: 0 auto;
 16         width: 80%;
 17     }
 18 
 19     .box-head {
 20         width: 30%;
 21         text-align: center;
 22         padding: 15px 20px;
 23         font-size: 24px;
 24     }
 25 
 26     .box-body {
 27         padding: 10px 20px;
 28     }
 29 
 30     .box-body th {
 31         font-weight: normal;
 32         vertical-align: top;
 33         padding-top: 12px;
 34     }
 35 
 36     .box-body tr:last-child {
 37         text-align: center;
 38     }
 39 
 40     .box-body input, button {
 41         vertical-align: middle;
 42         font-family: Tahoma, simsun;
 43         font-size: 12px;
 44     }
 45 
 46     .box-body input[type=radio] {
 47         height: 38px;
 48     }
 49 
 50     .box-body input[type=text],
 51     .box-body input[type=password] {
 52         border-color: #bbb;
 53         height: 38px;
 54         font-size: 14px;
 55         border-radius: 2px;
 56         outline: 0;
 57         border: #ccc 1px solid;
 58         padding: 0 10px;
 59         width: 350px;
 60         -webkit-transition: box-shadow .5s;
 61         margin-bottom: 15px;
 62     }
 63 
 64     .box-body input[type=text]:hover,
 65     .box-body input[type=text]:focus,
 66     .box-body input[type=password]:hover,
 67     .box-body input[type=password]:focus {
 68         border: 1px solid #56b4ef;
 69         box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 0 8px rgba(82, 168, 236, .6);
 70         -webkit-transition: box-shadow .5s;
 71     }
 72 
 73     .box-body input::-webkit-input-placeholder {
 74         color: #999;
 75         -webkit-transition: color .5s;
 76     }
 77 
 78     .box-body input:focus::-webkit-input-placeholder,
 79     input:hover::-webkit-input-placeholder {
 80         color: #c2c2c2;
 81         -webkit-transition: color .5s;
 82     }
 83 
 84     .box-body button[type=submit] {
 85         padding: 4px 15px;
 86         cursor: pointer;
 87         width: 120px;
 88         height: 40px;
 89         background: #4393C9;
 90         border: 1px solid #fff;
 91         color: #fff;
 92         font: 16px bolder;
 93     }
 94 
 95     .box-body button[type=reset] {
 96         margin-left: 30px;
 97         cursor: pointer;
 98         width: 120px;
 99         height: 40px;
100         background: #4393C9;
101         border: 1px solid #fff;
102         color: #fff;
103         font: 16px bolder;
104     }
105 
106     .box-body .error {
107         border: 1px solid #FF3300;
108         background: #FFF2E5;
109         font-size: 10px;
110         height: 30px;
111         line-height: 30px;
112         margin-bottom: 10px;
113         padding: 0 10px;
114     }
115 
116     .box-body .success {
117         border: 1px solid #01BE00;
118         background: #E6FEE4;
119         font-size: 10px;
120         height: 30px;
121         line-height: 30px;
122         margin-bottom: 10px;
123         padding: 0 10px;
124     }
125 
126 </style>
127 <body>
128 <!--
129     1.设计一个用户注册页面,显示当前日期、时间和星期。注册内容包括用户名,密码及密码确认框,性别,邮箱,手机号码,一个提交按钮,一个重写按钮(清空所有文本框内容)。
130 
131     提示:
132     A.    页面显示数据:document.write()
133     B.    当前日期、时间和星期:Date对象。
134     C.    获取表单中输入的数据:document.表单名.表单元素名.value
135     D.    密码及密码确认要求2次输入的内容相同,利用String对象的方法判断。
136     E.    文本框的内容及长度控制都利用String对象的方法。
137     F.    弹出新窗口window.open()
138 -->
139 <div class="box">
140     <div class="box-head">填写注册信息</div>
141     <div class="box-body">
142         <form id="registerForm" action="" method="post" onsubmit="return checkForm()">
143             <table>
144                 <tr>
145                     <th>当前时间:</th>
146                     <td><p id="currentDate"></p></td>
147                     <td>
148                         <div></div>
149                     </td>
150                 </tr>
151                 <tr>
152                     <th>用户名称:</th>
153                     <td><input type="text" id="userName" name="userName" placeholder="长度2-12位以内的中英文字符和数字"></td>
154                     <td>
155                         <div></div>
156                     </td>
157                 </tr>
158                 <tr>
159                     <th>密  码:</th>
160                     <td><input type="password" id="passWord" name="passWord" placeholder="长度4-12位任意字符"></td>
161                     <td>
162                         <div></div>
163                     </td>
164                 </tr>
165                 <tr>
166                     <th>确认密码:</th>
167                     <td><input type="password" id="confirmPwd" name="confirmPwd" placeholder="请再次输入密码进行确认"></td>
168                     <td>
169                         <div></div>
170                     </td>
171                 </tr>
172                 <tr>
173                     <th>性  别:</th>
174                     <td><input type="radio" id="sexMale" name="sex" value="1"/><label for="sexMale"></label>&nbsp;&nbsp;
175                         <input type="radio" id="sexFemale" name="sex" value="0"/><label for="sexFemale"></label></td>
176                     <td>
177                         <div></div>
178                     </td>
179                 </tr>
180                 <tr>
181                     <th>手机号码:</th>
182                     <td><input type="text" id="tel" name="tel" placeholder="13、14、15、17、18开头的11位手机号"></td>
183                     <td>
184                         <div></div>
185                     </td>
186                 </tr>
187                 <tr>
188                     <th>电子邮箱:</th>
189                     <td><input type="text" id="email" name="email" placeholder="用户名@域名(域名后缀至少2个字符)"></td>
190                     <td>
191                         <div></div>
192                     </td>
193                 </tr>
194             </table>
195             <div style="margin-top: 20px;margin-left: 70px;">
196                 <button type="submit" id="submitFormBtn">注册</button>
197                 <button type="reset">重置</button>
198             </div>
199         </form>
200     </div>
201 </div>
202 
203 
204 <script type="text/javascript">
205 
206     //获取当前客户端系统时间
207     function getCurrentDate() {
208         var nowDate = new Date();
209         var year = nowDate.getFullYear();
210         var month = nowDate.getMonth() + 1;
211         var day = nowDate.getDate();
212         var myDay = nowDate.getDay();
213         var hours = nowDate.getHours();
214         var minute = nowDate.getMinutes();
215         var second = nowDate.getSeconds();
216         var weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
217         if (month >= 1 && month <= 9) {
218             month = "0" + month;
219         }
220         if (day >= 0 && day <= 9) {
221             day = "0" + day;
222         }
223         if (minute >= 0 && minute <= 9) {
224             minute = "0" + minute;
225         }
226         if (second >= 0 && second <= 9) {
227             second = "0" + second;
228         }
229         document.getElementById("currentDate").innerHTML = +year + "" + month + "" + day + "" + hours + ":" + minute + ":" + second + "   " + weeks[myDay];
230     }
231 
232     window.setInterval(getCurrentDate, 1000);
233 
234     // 获取所有input框
235     var inputs = document.getElementsByTagName('input');
236     // 为每个input框添加失去焦点事件
237     for (var i = 0; i < inputs.length; i++) {
238         inputs[i].onblur = inputBlur;
239     }
240 
241     function inputBlur() {
242         var name = this.name;           // 获取输入框的name值
243         var val = this.value;           // 获取输入框的value值
244         var tips = this.placeholder;    // 获取输入框中的提示信息
245         var tips_obj = this.parentNode.parentNode.children[2].children[0];  // 获取提示信息显示的div元素对象
246         // 1. 去掉两端的空白字符
247         val = val.trim();
248         // 2. 文本框内容为空,给出提示信息
249         if (!val) {
250             error(tips_obj, '输入框不能为空');
251             return false;
252         }
253         // 3. 获取正则匹配规则和提示信息
254         var reg_msg = getRegMsg(name, tips);
255         // 4. 检测是否否he正则匹配
256         if (reg_msg['reg'].test(val)) {
257             // 匹配成功,显示成功的提示信息
258             success(tips_obj, reg_msg['msg']['success']);
259         } else {
260             // 匹配失败,显示失败的提示信息
261             error(tips_obj, reg_msg['msg']['error']);
262         }
263     }
264 
265     /*
266         * A.用户名:2-12位以内的中英文字符和数字
267         * B.密码及密码确认:4-12位任意字符
268         * C.邮箱:含有@及.
269         * D.手机号码:由数字组成,11位
270         * E.每项都是必填项
271         * F.如果不满足以上要求,利用警告框(alert)给出相应的提示。
272         * G.添加适当的事件处理,如果用户填写正确,则在新窗口中显示“注册成功!”(新窗口没有菜单条,工具条和地址栏)
273     * */
274 
275     // 根据input的name值,设置正则规则及提示信息
276     function getRegMsg(name, tips) {
277         var reg = msg = '';
278         switch (name) {
279             case 'userName':
280                 reg = /^[a-zA-Z0-9]{2,12}$/;
281                 msg = {'success': '用户名输入正确', 'error': tips};
282                 break;
283             case 'passWord':
284                 reg = /^.{4,12}$/;
285                 msg = {'success': '密码输入正确', 'error': tips};
286                 break;
287             case 'confirmPwd':
288                 var con = document.getElementsByTagName('input')[1].value;
289                 reg = RegExp("^" + con + "$");
290                 msg = {'success': '两次密码输入正确', 'error': '两次输入的密码不一致'};
291                 break;
292             case 'sex':
293                 reg = /^[0-1]*$/;
294                 msg = {'success': '性别已选择', 'error': '性别不能为空'};
295                 break;
296             case 'tel':
297                 reg = /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/;
298                 msg = {'success': '手机号码输入正确', 'error': tips};
299                 break;
300             case 'email':
301                 reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
302                 msg = {'success': '邮箱输入正确', 'error': tips};
303                 break;
304         }
305         return {'reg': reg, 'msg': msg};
306     }
307 
308     // 成功
309     function success(obj, msg) {
310         obj.className = 'success';
311         obj.innerHTML = msg;
312     }
313 
314     // 失败
315     function error(obj, msg) {
316         obj.className = 'error';
317         obj.innerHTML = msg + ',请重新输入';
318     }
319 
320     /**
321      * 判断输入内容
322      * */
323     function checkInput(content) {
324         return !(content === "" || content.length === 0 || content === null || content === undefined);
325     }
326 
327     document.getElementById("registerForm").onsubmit = function () {
328         var userName = document.getElementById("userName");
329         var passWord = document.getElementById("passWord");
330         var confirmPwd = document.getElementById("confirmPwd");
331         var gender = document.getElementsByName("sex");
332         var tel = document.getElementById("tel");
333         var email = document.getElementById("email");
334 
335         var formElements = [userName, passWord, gender[0], confirmPwd, tel, email];
336         for (var i = 0; i < 6; i++) {
337             var tips_obj = formElements[i].parentNode.parentNode.children[2].children[0];  // 获取提示信息显示的div元素对象
338             if (checkInput(formElements[i].value) === false) {
339                 error(tips_obj, '输入框不能为空');
340                 return false;
341             }
342             if (tips_obj.className === 'error') {
343                 return false;
344             }
345         }
346 
347         var flag = false;//检查radio是否被选中
348 
349         for (var j = 0; j < gender.length; j++) {
350             if (gender[j].checked) {
351                 flag = true;
352                 break;
353             }
354         }
355 
356         if (flag === false) {
357             var tips = gender[0].parentNode.parentNode.children[2].children[0];  // 获取提示信息显示的div元素对象
358             error(tips, '性别不能为空');
359             return false;
360         }
361 
362         alert("注册成功!");
363         window.location.reload();
364         return true;
365     };
366 </script>
367 <!--<script type="text/javascript" src="js/index.js"></script>-->
368 </body>
369 </html>

 

 

猜你喜欢

转载自www.cnblogs.com/yijiahao/p/11742445.html
今日推荐