通过JavaScript进行登录验证在大部分页面的首页中,都会存在用户登录的输入框。
当用户输入了个人信息后(一般为用户名和密码),页面的程序通过检索和验证,如果结果为真,则跳转到子页面,如果验证后结果为假,则提示重新输入信息。
而这种验证的过程必须借助数据库以及网站开发的语言的支持。
首先请看下面的流程图,对这个验证的过程有一个初步的了解。
用户在登录页面填写用户名和密码信息后,当点击提交按钮后,这些信息就会通过Http协议传送到网站后台的验证程序中,验证程序接收这些信息,并做一些必要的处理后,运行一个SQL查询语言(验证程序事先已经和数据库建立了连接),调用后台的数据库,如果这个用户名和密码在数据库中有记录,则数据库返回的结果为true,此时验证程序判断查询的结果,如果为true,则进行页面跳转,这时客户端的页面就会跳转到一个真正的业务界面中;如果查询返回的结果为false,则验证程序不进行跳转,并给客户端的页面输出一个警告信息。
以上的全过程可以通过很多高级编程语言实现,比如PHP、Java等。
但是需要后台数据库的支持,而且网站的服务器也需要配置数据库插件。
这一方面服务器架构过于繁杂,更关键的是,对于一些小型网站来说,为了节省成本和提高访问速度,没有必要进行如此复杂的服务器配置。
所以就引出了接下来的关于通过JavaScript脚本语言来进行登录信息的验证操作。
众所周知,JavaScript是一种脚本语言,即运行在客户端的程序语言。
当用户打开浏览器,输入某个网站地址后,不仅仅下载的是网站的html文件,同时也会下载与这个html文档配套的*.js 文件。
这样当用户在点击页面的某些选项时页面才会做出正确的反应。
登录信息需要提交,在html页面中实现此功能借助的是表单标签。
下面来看一段代码。
Html页面<form action="accountManagement.jsp" method="post" onSubmit="return validate(this)">Username:<input type="text" name="username"><br>Password:<input type="password" name="password"><br><input type="submit" value="submit"><input type="reset" value="reset"> </form>JavaScript代码var account=[["admin","aaa"],["master","mmm"],["leader","lll"]];function validate(f){var flag=false;var username=ername.value;var password=f.password.value;for(var x=0;x<account.length;x++){if(account[x][0]==username&&account[x][1]==password){ flag=true;}}if(!flag){alert("Error !");}return flag;}在html代码中,表单form标签的一个属性为onSubmit,这个属性表示当点击提交按钮后所之行的操作,看到该属性的值是一个返回值,即return validate(this)。
这表示在提交后,其实还要执行一个validate()函数,如果这个函数的返回值为true,则页面跳转到accountManagement.jsp页面,如果函数返回值为false,则不予跳转,并弹出一个警告窗口,显示error的字样。
在JavaScript代码中,看到了一个二维数组,这就是通过JavaScript的方式来模拟一个数据库表,记录的是这个网站的所有用户名和与之对应的密码。
这个validate()函数就是首先接收了表单中的username和password数据后,然后在这个二维数组中进行比对,如果有相同的记录,则返回true,否则为false。
另外,如果要想让这种方式正常运转,则还需要在html页面中加入一段代码,表示调用这个*.js 文档,这样html 页面才能找到validate()函数。
<script type="text/javascript" src="adminlogin.js"></script>其中adminlogin.js就是这个validate()函数和二维数组所在的文件名。
以上解释的是如何验证用户输入的信息,主要的重点是程序运行的流程和代码的架构。
还有另一个方面的事情也很重要,就是如何验证用户输入的信息是否符合格式的要求。
例如一个输入框要求用户输入一个邮箱的名字,可是由于一些原因用户输入的时候没有键入@,那么在日后处理用户信息的时候,会造成数据的不完整和不可用,无形中产生了很多垃圾数据。
记得有一个国外的高级程序员写的书中,讲用户输入比作“魔鬼”,因为你无法预知用户会如何输入。
所以应该在最开始的时候就讲数据进行验证,以此来获得规范的可用的数据。
Html代码:<form action="welcome.html" method="post" onSubmit="return validate(this)">请输入邮箱地址:<input type="text" name="email"><input type="submit" value="提交"><input type="reset" value="重写"></form>用来进行输入数据验证的代码仍然是上一节采用的JavaScript代码,不同的是,对代码的格式要通过正则表达式进行验证,正则表达式在很多语言中都在使用,是用来进行数据格式规范的重要手段。
下面介绍正则表达式。
括号(Brackets):括号当被用于进行上下文的检测是有着特殊的意义,它被用来找到一段字符。
Expression Description[...]Any one character between the brackets.[^...]Any one character not between the brackets.[0-9]It matches any decimal digit from 0 through 9.[a-z]It matches any character from lowercase a through lowercase z.[A-Z]It matches any character from uppercase A through uppercase Z.[a-Z]It matches any character from lowercase a through uppercase Z.原则上正则表达式是一个字符对应数据的一个字符,也可以用括号讲正则表达式括起来,表示括号里的字符对应数据的一个字符。
alert(/ruby/.test("ruby"));//true 一一对应alert(/[abc]/.test("a"));//true 含有a或者b或者calert(/[abc]/.test("b"));//true 同上alert(/[abc]/.test("c"));//true 同上另外的一种情况是,表示数据不能匹配正则表达式中括号里的规则。
alert(/[^abc]/.test("a"));//falsealert(/[^abc]/.test("b"));//falsealert(/[^abc]/.test("6"));//truealert(/[^abc]/.test("gg"));//true还可以把一个范围的正则规则放在中括号里alert(/[a-f]/.test("b"));//true alert(/[a-f]/.test("k"));//false alert(/[a-z]/.test("h"));//true alert(/[A-Z]/.test("gg"));//false alert(/[^H-Y]/.test("G"));//true alert(/[0-9]/.test("8"));//true alert(/[^7-9]/.test("6"));//true预定义alert(/\d/.test("3")); //true alert(/\d/.test("w")); //false alert(/\D/.test("w")) ; //truealert(/\w/.test("w")); //true alert(/\w/.test("司")); //false alert(/\W/.test("徒")); //true alert(/\s/.test(" ")); //true alert(/\S/.test(" ")); //false alert(/\S/.test("正")); //true alert(/./.test("美")); //true alert(/./.test(" ")); //true量词(Quantifiers)检测字符串中拥有指定的字符的个数,如果满足个数的要求,则为true,否则为false。