- Struts 2.x权威指南
- 李刚编著
- 1131字
- 2025-03-11 03:21:11
5.1.2 客户端校验
客户端校验就是通过JavaScript在数据收集页面(通常是表单输入页)中进行初步过滤, JavaScript是一个功能非常强大的网页脚本,代码支持正则表达式,除了可以进行客户端校验外,JavaScript也是Ajax(Asynchronous JavaScript And XML)的核心技术。
提示:
如果读者需要获得更多关于JavaScript的知识,请参阅疯狂Java体系的《疯狂Ajax讲义》一书。
下面将为图4.2所示的页面增加客户端校验的JavaScript代码。
程序清单:codes\05\5.1\Validate\regist.jsp
<script type="text/javascript"> String.prototype.trim = function() { return this.replace(/^\s+/ , "") .replace(/\s+$/, ""); } // 校验表单的JavaScript函数 function validate(form) { // 定义错误字符串 var errStr = ""; // 依次取出表单中的四个表单域的值 var username = form.username.value.trim(); var pass = form.pass.value.trim(); var age = form.age.value.trim(); var birth = form.birth.value.trim(); // 判断用户名不能为空 if (username == "" || username == null) { errStr += "您的用户名必须输入"; } // 判断用户名必须是字母和数字,且长度必须在4到25之间 else if (!/^\w{4,25}$/.test(username)) { errStr += "\n您的用户名必须是字母和数字,且长度在4到25之间"; } // 判断密码必须输入 if (pass == "" || pass == null) { errStr += "\n您的密码必须输入"; } // 判断密码必须是字母和数字,且长度必须在4到25之间 else if (!/^\w{4,25}$/.test(pass)) { errStr += "\n您的密码必须是字母和数字,且长度在4到25之间"; } // 判断年龄必须输入 if (age == "" || age == null) { errStr += "\n您的年龄必须输入"; } // 判断年龄必须是一个有效的年龄 else if (!/^[0-1]?[0-9]?[0-9]$/.test(age)) { errStr += "\n您的年龄必须为整数,且必须是一个有效的年龄值"; } // 判断生日必须输入 if (birth == "" || birth == null) { errStr += "\n您的生日必须输入"; } // 判断生日必须是一个有效的日期,且只能是19xx年,或者20xx年 else if(!/^19\d\d\-[0-1]\d\-[0-3]\d$/.test(birth) && !/^20[0-1]\d\-[0-1]\d\-[0-3]\d$/.test(birth)) { errStr += "\n您的生日格式不正确,格式:yyyy-MM-DD"; } // 如果错误字符串为空,表明客户端校验通过 if (errStr == "") { return true; } // 客户端校验没有通过,通过警告框输出校验失败提示 else { alert(errStr); return false; } } </script>
上面的校验函数大量使用了正则表达式来校验用户的输入,正则表达式在基于JavaScript的客户端校验中有着非常广泛的用处。
提示:
如果读者希望获得关于正则表达式的知识,可以参考Java API文档中Pattern类的说明。
定义了上面的客户端校验函数后,还需要在页面的表单中使用该校验函数来进行客户端校验,只需要将该校验函数绑定到表单的onsubmit属性即可,即将表单元素修改为如下形式。
<!-- 将输入校验函数绑定到表单元素的onsubmit属性 -->
<form method="post" action="regist"
onsubmit="return validate(this);">
...
</form>
增加了上面的客户端校验后,如果我们再输入不合法的数据,将看到如图5.2所示的提示框。

图5.2 客户端校验的提示框
正如图5.2中所看到的,如果浏览者再次输入300的年龄,客户端的JavaScript校验将会直接弹出警告框,提示输入无效!当然,如果浏览者输入的其他表单域不符合要求,一样会弹出警告框,提示用户输入出错。
提示:
可能有的读者会觉得上面的客户端校验比较烦琐。事实上,这些客户端校验确实比较烦琐,开发者必须为每个表单书写大量的客户端校验代码,这的确是一件很烦琐的事情,而且容易出错。大部分时候,笔者都会借助第三方的客户端校验库,例如Valiadation.js库等。
上面的页面增加了严格的客户端校验,如果用户的输入不满足这些校验要求,将无法通过该页面提交请求。但服务器端校验依然必须进行,关于进行服务器端校验的必要性,下一节将详细讲解。