建立良好体验度的Web注册系统ajax_javascript技巧

*项目名称:具有良好体验度的Web注册系统
*作者:草履虫
*联系:caolvchong@gmail.com
*时间:2007-6-29
*起因和版权说明:
  1.蓝色理想上有位会员发布了个类似的系统,提问说验证码不支持firefox的刷新,于是萌生念头做一个.本系统外观(按钮取色等)借鉴了该系统,但细节实现原理并不相同(该文地址:http://bbs.blueidea.com/thread-2761325-1-4.html).
  2.另外,自己做的这个注册系统中利用了网络上的无组件验证码(作者sipo)
  3.至于密码强度的算法借鉴了蓝色理想的一篇文章(http://www.blueidea.com/tech/web/2006/4324.asp),但该算法并不十分理想,如果有更好算法的朋友不妨交流一下
*特点和知识点:
  1.AJAX验证用户名和验证码,同时异步进行用户名注册(都属于AJAX的很基础部分)
  2.支持验证码刷新(包括firefox平台下)
  3.密码,邮箱,用户名等即时检测(利用javascript DOM)
  4.HTML通过W3C Strict验证,CSS也通过W3C CSS验证(其实这个有点多余,并不完全必要)
*开发平台:Windows2003 IIS6.0 Access数据库
*工具:DreamWeaver(写ASP),Aptana(写Javascript,HTML和CSS),Emeditor(写这篇文章),Access2003(数据库)
*测试平台:Firefox2.0,Opera9.21,IE6.0,IE7.0
*演示地址:http://finish.3322.org/reg/reg.htm(短期有效,在本机上,可能访问不顺畅)
*原文地址:http://cceer.xmu.edu.cn/blog/view.asp?id=52
*补充:
  如果你使用这个注册系统,请务必注意下列问题:
    本系统没有对密码进行加密,如果需要,可以搜索MD5加密
    本系统没有进行防注入设置,如果需要,可以搜索SQL防注入
  限于本人水平上的限制,错误和不足在所难免,如果你有问题或者建议,请联系我,感谢!
*这里是效果图
限于文章长度的限制,只帖出两个js文件和一个显示注册页面,至于后台处理页面以及css文件等,请在压缩包中查看
1.reg.htm(由于BLOG会过滤,分开三个部分写) 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312"> 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<title>草履虫---简易AJAX注册页面</title>
  <link href="reg.css" type="text/css" rel="stylesheet" />
  <script src="detect.js" type="text/javascript"></script>
  <script src="ajax.js" type="text/javascript"></script>
</head>
<body onload="check_data();">

view plaincopy to clipboardprint?
<UL>  
<LI id=title>草履虫---Web注册系统   
<LI class=underline>  
    <LABEL>注册用户名:   
        <INPUT onblur=check_id(this.value); maxLength=16>  
    </LABEL>  
    <SPAN>支持汉字,单词,数字,敏感字符屏蔽</SPAN>  

<LI>  
    <LABEL>注册密码:   
        <INPUT onblur=check_password(); type=password value="">  
    </LABEL>  
    <SPAN>密码在6-16位之间,敏感字符屏蔽</SPAN>  

<LI class=underline>  
    <LABEL>重复密码:   
        <INPUT onblur=check_pw(); type=password maxLength=16 value="">  
    </LABEL>  
    <SPAN></SPAN>  

<LI class=underline>  
    <LABEL>邮箱:   
        <INPUT onblur=check_email(this.value)>  
    </LABEL>  
    <SPAN>email是联系重要手段</SPAN>  

<LI class=underline>验证码:   
    <INPUT onblur=checkcode(this.value); maxLength=5>  
    <LABEL>  
        <IMG id=src onclick="this.src=this.src+'?'+Math.random();" height=18 alt=看不清楚?请点击刷新 src="getcode.asp">  
        <SPAN>看不清楚?请点击验证码刷新</SPAN>  
    </LABEL>  

<LI class=underline>  
    相关协议:   
        <LABEL onclick=accept_info();><INPUT type=radio name=info>接受</LABEL>  
        <LABEL onclick=refuse_info();><INPUT type=radio name=info>不接受</LABEL>    
        <INPUT class=button type=button value=阅读协议>  

<LI class=underline>  
    <INPUT class="button setleft" onclick="sendinfo($('input')[0].value,$('input')[1].value,$('input')[3].value)" type=submit value=注册>  
    <INPUT class=button onclick=reset_info() type=reset value=重置>  
    <SPAN></SPAN>  

<LI class=copyright>作者:草履虫   
<LI class=copyright>时间:2007-6-28   
<LI class=copyright>联系:caolvchong@gmail.com   
<LI class=copyright>Blog---Web2.0之路:<A href="http://cceer.xmu.edu.cn/blog/">http://cceer.xmu.edu.cn/blog/</A>  
/LI></UL>  

     
        草履虫---Web注册系统

            注册用户名:

            
            支持汉字,单词,数字,敏感字符屏蔽

        
            注册密码:

            
            密码在6-16位之间,敏感字符屏蔽

        
            重复密码:

            

        

            邮箱:

            
            email是联系重要手段

        验证码:

            

                看不清楚?请点击验证码刷新

        

            相关协议:
                接受
                不接受 

        

            

            

        作者:草履虫
        时间:2007-6-28
        联系:caolvchong@gmail.com
        Blog---Web2.0之路:http://cceer.xmu.edu.cn/blog/

</body>
</html>

2.detect.js view plaincopy to clipboardprint?
    var flag=[0,0,0,0,0,0];   
    var $=function(tagName){   
        return document.getElementsByTagName(tagName);   
    }   
//----------接受协议   
    function accept_info(){   
        flag[0]=1;   
        check_data();   
    }   
//----------拒绝协议   
    function refuse_info(){   
        flag[0]=0;   
        check_data();   
    }   
//----------重置   
    function reset_info(){   
        var info=["支持汉字,单词,数字,敏感字符屏蔽","密码在6-16位之间,敏感字符屏蔽","","email是联系重要手段","看不清楚?请点击验证码刷新"]   
        for(var i=0;i<$("span").length;i++){   
            $("span")[i].innerHTML=info[i];   
            flag[i]=0;   
        }   
        for(var i=0;i<$("input").length-3;i++){   
            $("input")[i].value="";   
        }   
        check_data();   
    }   
//----------邮箱检测   
    function check_email(email){   
        var reEmail=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;   
        var b_email=reEmail.test(email);   
        if(b_email){   
            $("span")[3].innerHTML="<IMG src="yesok.gif"> 邮箱可用";   
            flag[1]=1;   
            check_data();   
        }   
        else{   
            $("span")[3].innerHTML="<IMG src="yesno.gif"> 邮箱错误";   
            flag[1]=0;   
            check_data();   
        }   
    }   
//----------密码检测   
    function check_password(obj){   
        var pwd=$("input")[1].value;   
        var reChinese=/[\u0391-\uFFE5]+/;   
        var b_chinese=reChinese.test(pwd);   
        var reSpace=/\s+/;   
        var b_space=reSpace.test(pwd);   
        //-------长度测试   
        if(pwd.length<6){   
            $("span")[1].innerHTML="<IMG src="yesno.gif"> 密码长度不能小于6";   
            flag[2]=0;   
            check_data();   
        }   
        //-------合法性检测:不能包含汉字   
        else if(b_chinese){   
            $("span")[1].innerHTML="<IMG src="yesno.gif"> 密码不能包含中文";   
            flag[2]=0;   
            check_data();   
        }   
        //-------合法性检测:不能包含空格   
        else if(b_space){   
            $("span")[1].innerHTML="<IMG src="yesno.gif"> 密码不能包含空格";   
            flag[2]=0;   
            check_data();   
        }   
        //-------合法时显示密码强度   
        else{   
            //定义对应的消息提示   
            var num=getResult(pwd);   
            var msg=new Array("<IMG src="bad.gif"> 密码强度差","<IMG src="comm.gif"> 密码强度一般","<IMG src="good.gif"> 密码强度强壮");   
            $("span")[1].innerHTML=msg[num];   
            if($("input")[2].value!=""){   
                check_pw();   
                }   
            return flag[2]=1;   
            check_data();   
            }   
        }   
        //定义检测函数,返回0/1/2分别代表差/一般/强   
        function getResult(s){   
            var ls =-1;   
            if (s.match(/[a-z]/ig)){   
                ls++;   
            }   
            if (s.match(/[0-9]/ig)){   
                ls++;   
            }   
            if (s.match(/(.[^a-z0-9])/ig)){   
                ls++;   
            }   
            return ls;   
        }   
    //---------密码一致性检测     
        function check_pw(){   
            var pwd=$("input")[1].value.toString();   
            var check_pwd=$("input")[2].value.toString();   
            if(flag[2]==1){   
                if(pwd==check_pwd){   
                    $("span")[2].innerHTML="<IMG src="yesok.gif"> 密码可以使用";   
                    flag[3]=1;   
                    check_data();   
                }   
                else{   
                    $("span")[2].innerHTML="<IMG src="yesno.gif"> 两次密码不相同";   
                    flag[3]=0;   
                    check_data();   
                }   
            }   
        }   
    //---------用户名合法性检测   
        function check_id(id_name){//只能字母和数字,是否相同用AJAX判断   
            var reId=/^[\w\u0391-\uFFE5]+$/;   
            var b_id=reId.test(id_name);   
            if(!b_id){   
                $("span")[0].innerHTML="<IMG src="yesno.gif"> ID命名非法";   
                flag[4]=0;   
                check_data();   
            }   
            else{//合法用户名用ajax的checkid()检测是否被注册过   
                checkid(id_name);   
            }   
        }   
    //---------检查数据,使提交按钮是否生效   
        function check_data(){   
            if(flag[0]==1 && flag[1]==1 && flag[2]==1 && flag[3]==1 && flag[4]==1 && flag[5]==1){   
                $("input")[8].disabled=false;   
            }   
            else{   
                $("input")[8].disabled=true;   
            }   
        }   

//--------------------------------------------------------------------  

        var flag=[0,0,0,0,0,0];
        var $=function(tagName){
            return document.getElementsByTagName(tagName);
        }
    //----------接受协议
        function accept_info(){
            flag[0]=1;
            check_data();
        }
    //----------拒绝协议
        function refuse_info(){
            flag[0]=0;
            check_data();
        }
    //----------重置
        function reset_info(){
            var info=["支持汉字,单词,数字,敏感字符屏蔽","密码在6-16位之间,敏感字符屏蔽","","email是联系重要手段","看不清楚?请点击验证码刷新"]
            for(var i=0;i<$("span").length;i++){
                $("span")[i].innerHTML=info[i];
                flag[i]=0;
            }
            for(var i=0;i<$("input").length-3;i++){
                $("input")[i].value="";
            }
            check_data();
        }
    //----------邮箱检测
        function check_email(email){
            var reEmail=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
            var b_email=reEmail.test(email);
            if(b_email){
                $("span")[3].innerHTML=" 邮箱可用";
                flag[1]=1;
                check_data();
            }
            else{
                $("span")[3].innerHTML=" 邮箱错误";
                flag[1]=0;
                check_data();
            }
        }
    //----------密码检测
        function check_password(obj){
            var pwd=$("input")[1].value;
            var reChinese=/[\u0391-\uFFE5]+/;
            var b_chinese=reChinese.test(pwd);
            var reSpace=/\s+/;
            var b_space=reSpace.test(pwd);
            //-------长度测试
            if(pwd.length<6){
                $("span")[1].innerHTML=" 密码长度不能小于6";
                flag[2]=0;
                check_data();
            }
            //-------合法性检测:不能包含汉字
            else if(b_chinese){
                $("span")[1].innerHTML=" 密码不能包含中文";
                flag[2]=0;
                check_data();
            }
            //-------合法性检测:不能包含空格
            else if(b_space){
                $("span")[1].innerHTML=" 密码不能包含空格";
                flag[2]=0;
                check_data();
            }
            //-------合法时显示密码强度
            else{
                //定义对应的消息提示
                var num=getResult(pwd);
                var msg=new Array(" 密码强度差"," 密码强度一般"," 密码强度强壮");
                $("span")[1].innerHTML=msg[num];
                if($("input")[2].value!=""){
                    check_pw();
                    }
                return flag[2]=1;
                check_data();
                }
            }
            //定义检测函数,返回0/1/2分别代表差/一般/强
            function getResult(s){
                var ls =-1;
                if (s.match(/[a-z]/ig)){
                    ls++;
                }
                if (s.match(/[0-9]/ig)){
                    ls++;
                }
                 if (s.match(/(.[^a-z0-9])/ig)){
                    ls++;
                }
                return ls;
            }
        //---------密码一致性检测    
            function check_pw(){
                var pwd=$("input")[1].value.toString();
                var check_pwd=$("input")[2].value.toString();
                if(flag[2]==1){
                    if(pwd==check_pwd){
                        $("span")[2].innerHTML=" 密码可以使用";
                        flag[3]=1;
                        check_data();
                    }
                    else{
                        $("span")[2].innerHTML=" 两次密码不相同";
                        flag[3]=0;
                        check_data();
                    }
                }
            }
        //---------用户名合法性检测
            function check_id(id_name){//只能字母和数字,是否相同用AJAX判断
                var reId=/^[\w\u0391-\uFFE5]+$/;
                var b_id=reId.test(id_name);
                if(!b_id){
                    $("span")[0].innerHTML=" ID命名非法";
                    flag[4]=0;
                    check_data();
                }
                else{//合法用户名用ajax的checkid()检测是否被注册过
                    checkid(id_name);
                }
            }
        //---------检查数据,使提交按钮是否生效
            function check_data(){
                if(flag[0]==1 && flag[1]==1 && flag[2]==1 && flag[3]==1 && flag[4]==1 && flag[5]==1){
                    $("input")[8].disabled=false;
                }
                else{
                    $("input")[8].disabled=true;
                }
            }

    //--------------------------------------------------------------------
3.ajax.js view plaincopy to clipboardprint?
function checkcode(regcode){       
    var xmlhttp;   
    try{   
        xmlhttp=new XMLHttpRequest();   
        }   
    catch(e){   
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");   
        }   
    xmlhttp.onreadystatechange=function(){   
    if (xmlhttp.readyState==4){   
        if (xmlhttp.status==200){   
            var data=xmlhttp.responseText;   
            code_result(data);   
            }   
        else{   
            $("span")[4].innerHTML="验证码校验失败,请联系管理员";   
            }   
        }   
    else{   
        $("span")[4].innerHTML="正在进行验证码校验...";   
        }   
    }   
    xmlhttp.open("post", "check_code.asp", true);   
    xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');   
    xmlhttp.send("regcode="+escape(regcode));   
}   
function code_result(data){   
    var resultbox=$("span")[4];   
    if(data==1){   
        resultbox.innerHTML='<IMG src="yesok.gif"> 验证码正确';   
        flag[5]=1;   
        check_data();   
        }   
    else{   
        resultbox.innerHTML='<IMG src="yesno.gif"> 验证码错误';   
        flag[5]=0;   
        check_data();   
        }   
}   

//--------------------------------------------------------------------   
function checkid(regid){       
    var xmlhttp;   
    try{   
        xmlhttp=new XMLHttpRequest();   
        }   
    catch(e){   
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");   
        }   
    xmlhttp.onreadystatechange=function(){   
    if (xmlhttp.readyState==4){   
        if (xmlhttp.status==200){   
            var data=xmlhttp.responseText;   
            id_result(data);   
            }   
        else{   
            $("span")[0].innerHTML="用户名检测失败,请联系管理员";   
            }   
        }   
    else{   
        $("span")[0].innerHTML="正在进行用户名校验...";   
        }   
    }   
    xmlhttp.open("post", "check_id.asp", true);   
    xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');   
    xmlhttp.send("regid="+escape(regid));   
}   
function id_result(data){   
    var resultbox=$("span")[0];   
    if(data==1){   
        resultbox.innerHTML='<IMG src="yesok.gif"> 用户名可用';   
        flag[4]=1;   
        check_data();   
        }   
    else{   
        resultbox.innerHTML='<IMG src="yesno.gif"> 该用户名已经被注册';   
        flag[4]=0;   
        check_data();   
    }   
}   

//--------------------------------------------------------------------   
function sendinfo(regname,pwd,email){   
    var xmlhttp;   
    try{   
        xmlhttp=new XMLHttpRequest();   
        }   
    catch(e){   
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");   
        }   
    xmlhttp.onreadystatechange=function(){   
    if (xmlhttp.readyState==4){   
        if (xmlhttp.status==200){   
            var data=xmlhttp.responseText;   
            reg_result(data);   
            }   
        else{   
            $("span")[5].innerHTML="注册失败,请联系管理员";   
            }   
        }   
    else{   
        $("span")[5].innerHTML="正在进行用户名注册...";   
        }   
    }   
    xmlhttp.open("post", "reg.asp", true);   
    xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');   
    xmlhttp.send("regname="+escape(regname)+"&pwd="+escape(pwd)+"&email="+escape(email));   
}   
function reg_result(data){   
    if(data==1){   
        $("span")[5].innerHTML='<A href="http://cceer.xmu.edu.cn/blog/" target=_blank>'+$("input")[0].value+",您好.请点击这里登陆</A>";   
        }   
    else{   
        $("span")[5].innerHTML="注册失败,请联系管理员";   
    }   
    }  
*这里是所有文件的打包下载(包括所有文件,图片,数据库等,解压后请在IIS下测试)
良好体验度的注册系统.rar

时间: 2016-07-09

建立良好体验度的Web注册系统ajax_javascript技巧的相关文章

[教程+分享]具有良好体验度的Web注册系统_应用技巧

*项目名称:具有良好体验度的Web注册系统 *作者:草履虫 *联系:caolvchong@gmail.com *时间:2007-6-29 *起因和版权说明: 1.蓝色理想上有位会员发布了个类似的系统,提问说验证码不支持firefox的刷新,于是萌生念头做一个.本系统外观(按钮取色等)借鉴了该系统,但细节实现原理并不相同(该文地址:http://bbs.blueidea.com/thread-2761325-1-4.html). 2.另外,自己做的这个注册系统中利用了网络上的无组件验证码(作者si

[教程+分享]具有良好体验度的Web注册系统

*项目名称:具有良好体验度的Web注册系统 *作者:草履虫 *联系:caolvchong@gmail.com *时间:2007-6-29 *起因和版权说明: 1.蓝色理想上有位会员发布了个类似的系统,提问说验证码不支持firefox的刷新,于是萌生念头做一个.本系统外观(按钮取色等)借鉴了该系统,但细节实现原理并不相同(该文地址:http://bbs.blueidea.com/thread-2761325-1-4.html). 2.另外,自己做的这个注册系统中利用了网络上的无组件验证码(作者si

电商网站Web设计提高用户体验度的九个要点

无论是传统商业时代还是互联网电商时代,提高用户的极致体验都是达成营销盈利目标的重要行动.而对于电商而言,Web设计的核心与目标就是以用户为中心,追求极致的用户体验,并完成其本身所承载的商业或用户诉求等目标. 互联网时代,电商网站Web设计提高用户体验度有以下九个要点: 一.网站定位 首先,你应该确定你的网站的用户群有哪些,是否承载电子商务功能单位,是否满足在线购物需求等等.传统的电商网站页面颜色过于单调.布局太过传统且整体缺乏活力,只是满足官网的定位,但是却无法满足电子商务的网站需求.因此,这时

关于儿童网站的web注册表单设计体验

儿童网站是一个特殊的网站类型,设计儿童网站是具有挑战的,因为你要了解儿童的心理活动与习惯.当然一般来说设计师都是成年人.所以本文我们将讨论下怎样设计儿童网站web注册页面(以儿童为中心做体验设计). 我们先来看看儿童的访问网站的一些特点,首先儿童的价值观与认知能力都比较差,所以他们比较厌烦抽象的数字体验,比较喜欢抽象的图片表达.而且作为儿童对于未知比较有好奇心,因此有创意的http://www.aliyun.com/zixun/aggregation/8936.html">视觉效果更容易吸

传统的电子商务在满足消费购物需求和用户体验度方面必将经历一段非传统的发展

电子商务的出现改变了商业的运作模式,也改变了人们的购物习惯,而这些趋势依托互联网进步与发展,作为传统的电子商务在满足消费购物需求和用户体验度方面必将经历一段非传统的发展,全球经济面临加息和通胀阴影,政府经济刺激措施的退出是对中国经济的考验.不过,从投资行业上看,电子商务仍然最受投资者的青睐,因为电子商务拥有需求比较刚性的客户,能为客户创造较高的价值,并且有较为清晰可行的盈利模式.如今,互联网企业无论在经营理念还是商业模式都非常成熟,巨大的市场发展空间也吸引着VC们的关注.互联网行业环境复杂.不确

大型web应用系统高性能架构方案

大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: 1)Web前端系统 2)负载均衡系统 3)数据库集群系统 4)缓存系统 5)分布式存储系统 6)分布式服务器管理系统 7)代码分发系统 Web前端系统 结构图: 为了达到不同应用的服务器共享.避免单点故障.集中管理.统一配置等目的,不以应用划分服务器,而是将所有服务器做统一使用,每台服务器都

关于web注册页的可用性分析

在Nielsen的可用性工程里提到可用性的其中一个原则是Errors,记得刚开博客的时候也穷举了一些关于可用性方面的文章,里面将这个errors翻译成了"少错",实际上我个人觉得(也有不少版本这么翻译)"容错"更为贴切.无论是客户端软件还是web软件,用户毕竟不是专业人员,他的操作必然不能按照程序员所设定的路线来走,那么很有可能就会发生错误,"少错"是一个很含糊的概念,怎样做到少错,如何才是少错呢?真正需要做的应该是"容错",

CodeIgniter创建一个简单的注册系统

CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包.它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发.使用 CodeIgniter 可以减少代码的编写量,并将你的精力投入到项目的创造性开发上. CodeIgniter是由Ellislab公司的CEO RickEllis开发的.其核心框架是为这个程序特别编写的,而其他很多类库.辅助函数和子系统则来自于RickEllis和PaulBurdick编写的内容管理系统Expression

DreamWeaver打造Web查询系统(3)

dreamweaver|web|查询系统 二.将 index.asp 转换为动态页面 从本小节开始,我们逐步将前面建立的静态页面转换为动态页面,使其和数据库相结合,以完成我们最终的页面. 首先我们要把首页转换为动态页面.在首页中,仅有右侧的"超值推荐"部分需要从数据库中读取数据,因此,我们的目的是从数据库中的 tele 表中读取 Is_Good 字段值为1的记录并按降序显示就可以了. ok,开始工作.第1步,建立数据集.在绑定面板,选择 记录集(查询) 菜单,并在对话框内根据图 6-5