用正则表达式+js写的一个表单校验,写的时候出现了许多问题,以及一些要注意的点:
1.表单提交时,没有在地址栏上显示数据(用get方式提交)。
原因:没有为表单添加name属性。
2.写js脚本的时候用的是<script type="text\javascript"><script/>
用script标签,别写成了<style type="text\css'><style/>
3.当表单的提示信息发生变化时,表单的布局也发生了变化。
解决:为表单所在表格(因为是用表格封装的表单)的第一行的每一个单元格固定宽度。
4.表单一定要加上onsubmit属性,onsubmit属性调用的函数一定要囊括表单中所有控件的验证函数,并且要有返回值,并且返回值为布尔型。
5.尽量将js文件单独封装。
6.用div标签来做为每一个表单控件校验结果的容器
7.用不同的颜色来显示校验的结果,一般是绿色-->成功,红色-->失败。
8.目前能想到的只有这么些了,欢迎大神继续补充。
附上代码:
html的:
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>JavaScript应用</title> <style type="text/css"> html, body, div, span, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, address, big, cite, code, del, em, img, ins, small, strong, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, iframe { margin:0px; padding:0px;/* 用来取消一些标签默认的margin和padding */ } body { text-align: center; } #father { position:relative; margin:auto; width: 800px; height:600px; border-style: solid; } #header { height:100px; width: 800px; background-image: url("images/bg2.jpg"); } #daohang { height:30px; width:800px; background-color: #99FFFF; } #left { width:180px; height:440px; background-color: #F0FFFF; } #right { position: absolute; top:130px; left:180px; height:440px; width:620px; text-align: left; } #footer { position:absolute; top:570px; height:30px; width: 800px; background-color: #99FFFF; } #header h1 { height: 3em; line-height: 3em; overflow: hidden; letter-spacing: 5px; } a { height: 2em; line-height: 2em; overflow: hidden; text-decoration: none; } p { height: 2em; line-height: 2em; overflow: hidden; } ul { list-style-type:none; } li { padding: 10px; } #apply { font-size: 30px; font-weight: bold; } .ftcss { font-family: 宋体, sans-serif; font-size:12pt; color:#0011aa; text-align: left; text-indent: 2em; line-height: 1.8; } .bold { font-weight: 600; } .italic { font-style: italic; } .underline { text-decoration: underline; } </style> <script type="text/javascript" src="checkForm.js"></script> </head> <body> <div id="father"> <div id="header"> <h1 class="title"> 软件开发基础-实验</h1> </div> <div id="daohang"> <a href="../test1/test1-index.html" class="one">实验一</a> <a href="../test2/test2-html.html" class="two">实验二</a> <a href="../test3/test3-jsimg.html" class="three">实验三</a> <a href="" class="four">实验四</a> <a href="" class="five">实验五</a> <a href="" class="six">实验六</a> <a href="" class="seven">实验七</a> <a href="" class="eight">实验八</a> </div> <div id="left"> <ul> <li id="apply">JS验证</li> <li id="formathtml"><a href="test4-form.html">JS客户端验证</a></li> </ul> </div> <div id="right"> <br/> <h2>JavaScript客户端验证</h2> <br/> <form id="myForm" onsubmit="checkAll();" action="test4-form.html" method="get"> <table cellspacing=13px"width="590"> <tr> <td colspan="3" align="center">用户注册信息</td> </tr> <tr> <td align="right" width="90px">用户名:</td> <td><input type="text" id="username" onblur="checkUserName()" name="username" width="120px"/></td> <td><div id="usernamePrompt" style="font-size:9px; color:#CCC;" align="left">*以英文开头,4~16个英文、数字或下划线字符!</div></td> </tr> <tr> <td align="right">电子邮箱:</td> <td> <input type="text" id="mail" onblur="checkMail()" name="mail"/> </td> <td> <div id="mailPrompt" style="font-size:9px; color:#CCC;" align="left">*</div> </td> </tr> <tr> <td align="right">密码:</td> <td> <input type="password" id="psw" onBlur="checkPsw()" name="psw"/> </td> <td> <div id="pswPrompt" style="font-size:9px; color:#CCC;" align="left"> *英文字母、数字、下划线,且长度在6~24个字符! </div> </td> </tr> <tr> <td align="right">重复密码:</td> <td> <input type="password" id="repsw" onBlur="checkRepsw()" name="repsw"/> </td> <td> <div id="repswPrompt" style="font-size:9px; color:#CCC;" align="left">*</div> </td> </tr> <tr> <td align="right">身份证号:</td> <td> <input type="text" id="userid" onBlur="checkIdNum()" name="Id"/> </td> <td> <div id="useridPrompt" style="font-size:9px; color:#CCC;" align="left"></div> </td> </tr> <tr> <td align="right">联系电话:</td> <td> <input type="text" id="phone" onBlur="checkPhone()" name="phone"/> </td> <td> <div id="phonePrompt" style="font-size:9px; color:#CCC;" align="left"></div> </td> </tr> <tr> <td align="center"> <input type="submit"/> </td> <td align="center"> <input type="reset"/> </td> </tr> </table> </form> </div> <div id="footer"> <p>2015-2016-1学期 软件工程</p> </div> </div> <script type="text/javascript"> </script> </body> </html>
js的:
/** * */ function checkUserName(){ var re=/^[a-zA-Z]\w{3,15}$/; if(re.test(document.getElementById('username').value)){ document.getElementById('usernamePrompt').innerHTML="<font color='green'>*用户名输入正确<font/>"; return true; }else{ document.getElementById('usernamePrompt').innerHTML="<font color='red'>*只能以英文开头,4~16个英文、数字或下划线字符!<font/>"; return false; } } function checkMail(){ var re = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/; if(re.test(document.getElementById('mail').value)){ document.getElementById('mailPrompt').innerHTML="<font color='green'>*电子邮箱输入正确<font/>"; return true; }else{ document.getElementById('mailPrompt').innerHTML="<font color='red'>*电子邮箱格式不正确!<font/>"; return false; } } function checkPsw(){ var reg=/^\w{6,24}$/; if(reg.test(document.getElementById('psw').value)){ document.getElementById('pswPrompt').innerHTML="<font color='green'>*密码输入正确<font/>"; return true; } else{ document.getElementById('pswPrompt').innerHTML= "<font color='red'>*必须为英文、数字、下划线,且长度在6~24个字符!<font/>"; return false; } } function checkRepsw(){ var one = document.getElementById('psw').value; var two = document.getElementById('repsw').value; if(one==''){ document.getElementById('repswPrompt').innerHTML="<font color='red'>*请输入密码!<font/>"; return false; }else{ if(one==two){ document.getElementById('repswPrompt').innerHTML="<font color='green'>*两次密码输入一致<font/>"; return true; }else{ document.getElementById('repswPrompt').innerHTML="<font color='red'>*两次密码输入不一致!<font/>"; return false; } } } function checkIdNum(){ var reg = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/; if(reg.test(document.getElementById('userid').value)){ document.getElementById('useridPrompt').innerHTML="<font color='green'>*身份证号码格式正确<font/>"; return true; }else{ document.getElementById('useridPrompt').innerHTML="<font color='red'>*身份证号码格式不正确!<font/>"; return false; } } function checkPhone(){ var reg=/^(?:(?:\(0\d{2,3}\)[- ]?\d{7,8})|(?:(?:0\d{2,3}[- ]?)?\d{7,8})|(?:1\d{10}))$/; if(reg.test(document.getElementById('phone').value)){ document.getElementById('phonePrompt').innerHTML="<font color='green'>*电话号码格式正确<font/>"; return true; }else{ document.getElementById('phonePrompt').innerHTML="<font color='red'>*电话号码格式不正确!<font/>"; return false; } } function checkAll(){ var flag=true; var msg=''; if(!checkUserName()){ msg+='用户名输入不正确!\n'; flag=false; } if(!checkMail()){ msg+='电子邮件输入不正确!\n'; flag=false; } if(!checkPsw()){ msg+='密码输入不正确!\n'; flag=false; } if(!checkRepsw()){ msg+='两次输入密码不一致\n!'; flag=false; } if(!checkIdNum()){ msg+='身份证号码格式不正确!\n'; flag=false; } if(!checkPhone()){ msg+='电话号码格式不正确!\n'; flag=false; } if(msg!=""){ alert(msg); } return flag; }