用正则表达式+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">&nbsp;&nbsp;&nbsp;&nbsp;软件开发基础-实验</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学期&nbsp;软件工程</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;
}

 

posted on 2016-12-01 18:22  北方丶有佳人  阅读(316)  评论(0编辑  收藏  举报