建立良好体验度的Web注册系统ajax
2018-09-21 21:39
*项目名称:具有良好体验度的Web注册系统
*作者:草履虫
*联系
*时间:2007-6-29
*起因和版权说明:
1.蓝色理想上有位会员发布了个类似的系统,提问说验证码不支持firefox的刷新,于是萌生念头做一个.本系统外观(按钮取色等)借鉴了该系统,但细节实现原理并不相同(该文地址:
2.另外,自己做的这个注册系统中利用了网络上的无组件验证码(作者sipo)
3.至于密码强度的算法借鉴了蓝色理想的一篇文章(但该算法并不十分理想,如果有更好算法的朋友不妨交流一下
*特点和知识点:
1.AJAX验证用户名和验证码,同时异步进行用户名注册(都属于AJAX的很基础部分)
2.支持验证码刷新(包括firefox平台下)
3.密码,邮箱,用户名等即时检测(利用javascriptDOM)
4.HTML通过W3CStrict验证,CSS也通过W3CCSS验证(其实这个有点多余,并不完全必要)
*开发平台:Windows2003IIS6.0Access数据库
*工具:DreamWeaver(写ASP),Aptana(写Javascript,HTML和CSS),Emeditor(写这篇文章),Access2003(数据库)
*测试平台:Firefox2.0,Opera9.21,IE6.0,IE7.0
*演示地址:短期有效,在本机上,可能访问不顺畅)
*原文地址:
*补充:
如果你使用这个注册系统,请务必注意下列问题:
本系统没有对密码进行加密,如果需要,可以搜索MD5加密
本系统没有进行防注入设置,如果需要,可以搜索SQL防注入
限于本人水平上的限制,错误和不足在所难免,如果你有问题或者建议,请联系我,感谢!
*这里是效果图
限于文章长度的限制,只帖出两个js文件和一个显示注册页面,至于后台处理页面以及css文件等,请在压缩包中查看
1.reg.htm(由于BLOG会过滤,分开三个部分写)
<!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Strict//EN
<htmlxmlns=
<head>
<metahttp-equiv=Content-Typecontent=text/html;charset=GB2312/>
<title>草履虫---简易AJAX注册页面</title>
<linkhref=reg.csstype=text/cssrel=stylesheet/>
<scriptsrc=detect.jstype=text/javascript></script>
<scriptsrc=ajax.jstype=text/javascript></script>
</head>
<bodyonload=check_data();>
viewplaincopytoclipboardprint?
<UL>
<LIid=title>草履虫---Web注册系统
<LIclass=underline>
<LABEL>注册用户名:
<INPUTonblur=check_id(this.value);maxLength=16>
</LABEL>
<SPAN>支持汉字,单词,数字,敏感字符屏蔽</SPAN>
<LI>
<LABEL>注册密码:
<INPUTonblur=check_password();type=passwordvalue=>
</LABEL>
<SPAN>密码在6-16位之间,敏感字符屏蔽</SPAN>
<LIclass=underline>
<LABEL>重复密码:
<INPUTonblur=check_pw();type=passwordmaxLength=16value=>
</LABEL>
<SPAN></SPAN>
<LIclass=underline>
<LABEL>邮箱:
<INPUTonblur=check_email(this.value)>
</LABEL>
<SPAN>email是联系重要手段</SPAN>
<LIclass=underline>验证码:
<INPUTonblur=checkcode(this.value);maxLength=5>
<LABEL>
<IMGid=srconclick=this.src=this.src+?+Math.random();height=18alt=看不清楚?请点击刷新src=getcode.asp>
<SPAN>看不清楚?请点击验证码刷新</SPAN>
</LABEL>
<LIclass=underline>
相关协议:
<LABELonclick=accept_info();><INPUTtype=radioname=info>接受</LABEL>
<LABELonclick=refuse_info();><INPUTtype=radioname=info>不接受</LABEL>
<INPUTclass=buttontype=buttonvalue=阅读协议>
<LIclass=underline>
<INPUTclass=buttonsetleftonclick=sendinfo($(input)[0].value,$(input)[1].value,$(input)[3].value)type=submitvalue=注册>
<INPUTclass=buttononclick=reset_info()type=resetvalue=重置>
<SPAN></SPAN>
<LIclass=copyright>作者:草履虫
<LIclass=copyright>时间:2007-6-28
<LIclass=copyright>联系
<LIclass=copyright>Blog---Web2.0之路:<Ahref=
/LI></UL>
草履虫---Web注册系统
注册用户名:
支持汉字,单词,数字,敏感字符屏蔽
注册密码:
密码在6-16位之间,敏感字符屏蔽
重复密码:
邮箱:
email是联系重要手段
验证码:
看不清楚?请点击验证码刷新
相关协议:
接受
不接受
作者:草履虫
时间:2007-6-28
联系:caolvchong@gmail.com
Blog---Web2.0之路:
</body>
</html>
2.detect.jsviewplaincopytoclipboardprint?
varflag=[0,0,0,0,0,0];
var$=function(tagName){
returndocument.getElementsByTagName(tagName);
}
//----------接受协议
functionaccept_info(){
flag[0]=1;
check_data();
}
//----------拒绝协议
functionrefuse_info(){
flag[0]=0;
check_data();
}
//----------重置
functionreset_info(){
varinfo=[支持汉字,单词,数字,敏感字符屏蔽,密码在6-16位之间,敏感字符屏蔽,,email是联系重要手段,看不清楚?请点击验证码刷新]
for(vari=0;i<$(span).length;i++){
flag[i]=0;
}
for(vari=0;i<$(input).length-3;i++){
$(input)[i].value=;
}
check_data();
}
//----------邮箱检测
functioncheck_email(email){
varreEmail=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
varb_email=reEmail.test(email);
if(b_email){
$(span)[3].innerHTML=<IMGsrc=yesok.gif>邮箱可用;
flag[1]=1;
check_data();
}
else{
$(span)[3].innerHTML=<IMGsrc=yesno.gif>邮箱错误;
flag[1]=0;
check_data();
}
}
//----------密码检测
functioncheck_password(obj){
varpwd=$(input)[1].value;
varreChinese=/[\u0391-\uFFE5]+/;
varb_chinese=reChinese.test(pwd);
varreSpace=/\s+/;
varb_space=reSpace.test(pwd);
//-------长度测试
if(pwd.length<6){
$(span)[1].innerHTML=<IMGsrc=yesno.gif>密码长度不能小于6;
flag[2]=0;
check_data();
}
//-------合法性检测:不能包含汉字
elseif(b_chinese){
$(span)[1].innerHTML=<IMGsrc=yesno.gif>密码不能包含中文;
flag[2]=0;
check_data();
}
//-------合法性检测:不能包含空格
elseif(b_space){
$(span)[1].innerHTML=<IMGsrc=yesno.gif>密码不能包含空格;
flag[2]=0;
check_data();
}
//-------合法时显示密码强度
else{
//定义对应的消息提示
varnum=getResult(pwd);
varmsg=newArray(<IMGsrc=bad.gif>密码强度差,<IMGsrc=comm.gif>密码强度一般,<IMGsrc=good.gif>密码强度强壮);
$(span)[1].innerHTML=msg[num];
if($(input)[2].value!=){
check_pw();
}
returnflag[2]=1;
check_data();
}
}
//定义检测函数,返回0/1/2分别代表差/一般/强
functiongetResult(s){
varls=-1;
if(s.match(/[a-z]/ig)){
ls++;
}
if(s.match(/[0-9]/ig)){
ls++;
}
if(s.match(/(.[^a-z0-9])/ig)){
ls++;
}
returnls;
}
//---------密码一致性检测
functioncheck_pw(){
varpwd=$(input)[1].value.toString();
varcheck_pwd=$(input)[2].value.toString();
if(flag[2]==1){
if(pwd==check_pwd){
$(span)[2].innerHTML=<IMGsrc=yesok.gif>密码可以使用;
flag[3]=1;
check_data();
}
else{
$(span)[2].innerHTML=<IMGsrc=yesno.gif>两次密码不相同;
flag[3]=0;
check_data();
}
}
}
//---------用户名合法性检测
functioncheck_id(id_name){//只能字母和数字,是否相同用AJAX判断
varreId=/^[\w\u0391-\uFFE5]+$/;
varb_id=reId.test(id_name);
if(!b_id){
$(span)[0].innerHTML=<IMGsrc=yesno.gif>ID命名非法;
flag[4]=0;
check_data();
}
else{//合法用户名用ajax的checkid()检测是否被注册过
checkid(id_name);
}
}
//---------检查数据,使提交按钮是否生效
functioncheck_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;
}
}
//--------------------------------------------------------------------
varflag=[0,0,0,0,0,0];
var$=function(tagName){
returndocument.getElementsByTagName(tagName);
}
//----------接受协议
functionaccept_info(){
flag[0]=1;
check_data();
}
//----------拒绝协议
functionrefuse_info(){
flag[0]=0;
check_data();
}
//----------重置
functionreset_info(){
varinfo=[支持汉字,单词,数字,敏感字符屏蔽,密码在6-16位之间,敏感字符屏蔽,,email是联系重要手段,看不清楚?请点击验证码刷新]
for(vari=0;i<$(span).length;i++){
$(span)[i].innerHTML=info[i];
flag[i]=0;
}
for(vari=0;i<$(input).length-3;i++){
$(input)[i].value=;
}
check_data();
}
//----------邮箱检测
functioncheck_email(email){
varreEmail=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
varb_email=reEmail.test(email);
if(b_email){
$(span)[3].innerHTML=邮箱可用;
flag[1]=1;
check_data();
}
else{
$(span)[3].innerHTML=邮箱错误;
flag[1]=0;
check_data();
}
}
//----------密码检测
functioncheck_password(obj){
varpwd=$(input)[1].value;
varreChinese=/[\u0391-\uFFE5]+/;
varb_chinese=reChinese.test(pwd);
varreSpace=/\s+/;
varb_space=reSpace.test(pwd);
//-------长度测试
if(pwd.length<6){
$(span)[1].innerHTML=密码长度不能小于6;
flag[2]=0;
check_data();
}
//-------合法性检测:不能包含汉字
elseif(b_chinese){
$(span)[1].innerHTML=密码不能包含中文;
flag[2]=0;
check_data();
}
//-------合法性检测:不能包含空格
elseif(b_space){
$(span)[1].innerHTML=密码不能包含空格;
flag[2]=0;
check_data();
}
//-------合法时显示密码强度
else{
//定义对应的消息提示
varnum=getResult(pwd);
varmsg=newArray(密码强度差,密码强度一般,密码强度强壮);
$(span)[1].innerHTML=msg[num];
if($(input)[2].value!=){
check_pw();
}
returnflag[2]=1;
check_data();
}
}
//定义检测函数,返回0/1/2分别代表差/一般/强
functiongetResult(s){
varls=-1;
if(s.match(/[a-z]/ig)){
ls++;
}
if(s.match(/[0-9]/ig)){
ls++;
}
if(s.match(/(.[^a-z0-9])/ig)){
ls++;
}
returnls;
}
//---------密码一致性检测
functioncheck_pw(){
varpwd=$(input)[1].value.toString();
varcheck_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();
}
}
}
//---------用户名合法性检测
functioncheck_id(id_name){//只能字母和数字,是否相同用AJAX判断
varreId=/^[\w\u0391-\uFFE5]+$/;
varb_id=reId.test(id_name);
if(!b_id){
$(span)[0].innerHTML=ID命名非法;
flag[4]=0;
check_data();
}
else{//合法用户名用ajax的checkid()检测是否被注册过
checkid(id_name);
}
}
//---------检查数据,使提交按钮是否生效
functioncheck_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.jsviewplaincopytoclipboardprint?
functioncheckcode(regcode){
varxmlhttp;
try{
xmlhttp=newXMLHttpRequest();
}
catch(e){
xmlhttp=newActiveXObject(Microsoft.XMLHTTP);
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
vardata=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-
xmlhttp.send(regcode=+escape(regcode));
}
functioncode_result(data){
varresultbox=$(span)[4];
if(data==1){
resultbox.innerHTML=<IMGsrc=yesok.gif>验证码正确;
flag[5]=1;
check_data();
}
else{
resultbox.innerHTML=<IMGsrc=yesno.gif>验证码错误;
flag[5]=0;
check_data();
}
}
//--------------------------------------------------------------------
functioncheckid(regid){
varxmlhttp;
try{
xmlhttp=newXMLHttpRequest();
}
catch(e){
xmlhttp=newActiveXObject(Microsoft.XMLHTTP);
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
vardata=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));
}
functionid_result(data){
varresultbox=$(span)[0];
if(data==1){
resultbox.innerHTML=<IMGsrc=yesok.gif>用户名可用;
flag[4]=1;
check_data();
}
else{
resultbox.innerHTML=<IMGsrc=yesno.gif>该用户名已经被注册;
flag[4]=0;
check_data();
}
}
//--------------------------------------------------------------------
functionsendinfo(regname,pwd,email){
varxmlhttp;
try{
xmlhttp=newXMLHttpRequest();
}
catch(e){
xmlhttp=newActiveXObject(Microsoft.XMLHTTP);
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
vardata=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));
}
functionreg_result(data){
if(data==1){
$(span)[5].innerHTML=<Ahref=您好.请点击这里登陆</A>;
}
else{
$(span)[5].innerHTML=注册失败,请联系管理员;
}
}
*这里是所有文件的打包下载(包括所有文件,图片,数据库等,解压后请在IIS下测试)
良好体验度的注册系统.rar