零基础学Struts
上QQ阅读APP看书,第一时间看更新

4.2 客户端校验

客户端校验可以过滤掉用户的错误操作,是第一道防线,一般使用JavaScript代码实现。下面介绍如何通过编写JavaScript来实现客户端校验。

4.2.1 正则表达式

客户端校验一般都使用JavaScript来进行输入的校验。JavaScript对输入判断都会使用到正则表达式。正则表达式是字符串处理的利器,功能非常强大。

正则表达式的功能非常强大,通过它可以进行字符串匹配、字符串查找和字符串替换。今天重点介绍字符串的匹配功能,字符串的匹配功能可以为输入校验提供了很大的帮助。先看下面简单的正则表达式的示例。

        正则表达式:a.b
        匹配abb, acb,

“.”是正则表达式的特殊字符,它的含义是匹配所有的字符还有空格和Tab键。表4.1所示列出了正则表达式常用的特殊字符及其作用。

表4.1 常用的特殊字符以及其作用

4.2.2 JavaScript中使用正则表达式

下面以一个简单示例来介绍在JavaScript中如何使用正则表达式进行字符串匹配。程序要求必须输入数字,如果输入的不是数字就弹出提示,代码如下所示。

        <html>
        <head>
              <title>JavaScript中使用正则表达式</title>
              <script language="javascript">
                    function validate(form){
                              var num = form.number.value;
                              if(! /^[0-9]*$/.test(num)){
                                      alert("输入的不是数字请重新输入数字");
                                      return false;
                              }
                              return true;
                      }
                </script>
          </head>
          <body>
                <form action="aa" method="post" onSubmit="return validate(this)">
                      输入数字:<input type="text" name="number">
                      <input type="submit">
                </form>
          </body>
          </html>

test方法检查在目标字符串中是否符合该模式,如果符合则返回true,页面可以进行提交;否则就返回false,页面弹出提示框,并无法进行提交。

“/..../”表示其中位于“/”定界符之间的部分就是将要在目标字符串中进行匹配的模式。只要把希望查找匹配字符串的模式内容放入“/”定界符之间即可。‘^’定位符规定匹配模式必须出现在目标字符串的开头,‘$’定位符规定匹配模式必须出现在目标对象的结尾。

下面来测试一下。假如现在在该页面中的文本框中不输入数字,而是输入字符。页面将会提示错误信息,如图4.7所示。

图4.7 客户端校验

使用正则表达式进行字符串匹配应该还能实现许多其他功能。下面给出一些常用的模式,通过对照前面表4.1可以好好地熟悉如何使用正则表达式进行字符串匹配,代码如下所示。

        要求:校验登录名:只能输入520个以字母开头,可带数字、"_"、"."的字串
        模式:/^[a-zA-Z]{1}([a-zA-Z0-9]—[._]){4,19}$/
        要求:校验用户姓名:只能输入130个以字母开头的字串
        模式:/^[a-zA-Z]{1,30}$/
        要求:校验普通电话,可以"+"开头,除数字外,可含有"-"
        模式:/^[+]{0,1}(\d){1,3}[ ]? ([-]? (\d){1,12})+$/
        要求:校验手机号码:必须以数字开头,除数字外,可含有"-"
        模式:/^[+]{0,1}(\d){1,3}[ ]? ([-]? ((\d)—[ ]){1,12})+$/

4.2.3 JavaScript完成客户端校验

现在为注册示例添加客户端校验功能。首先来看下有哪些输入校验规则。

(1)用户名、密码、确认密码必须输入。

(2)用户名只能是数字或者字母,长度为6~20之间。

(3)密码、确认密码必须是数字或者字母,长度为6~20之间。

(4)密码和确认密码必须相同。

(5)年龄必须为整数,而且必须是有效的年龄值。

(6)出生日期必须为正确的日期格式,如1988-01-03,而且只能是19**年到200*年之间。

(7)邮箱地址必须为合法的邮箱地址。

根据程序要求,设计如下代码。

    <html>
    <head>
        <title>JavaScript中使用正则表达式</title>
        <script language="javascript">
              //使用此函数截断字符串前后的空格
              function trim(str){
                    return str.replace(/^\s*/, "").replace(/\s*$/, "");
                }
                function validate(form){
                      //定义错误字符串
                      var errors = "";
                      //取出表单中的值并使用trim截断前后空格
                      var username = trim(form.username.value);
                      var password = trim(form.password.value);
                      var repassword = trim(form.repassword.value);
                      var age = trim(form.age.value);
                      var birth = trim(form.birth.value);
                      var email = trim(form.email.value);
                      //判断用户名是否输入,如果输入了,再判断格式是否正确
                      if(username == "" —— username == null){
                            errors += "用户名必须输入";
                      }else if(! /^\w{6,20}$/.test(username)) {
                            errors += "\n用户名必须是字母和数字,长度为620之间"
                      }
                      //判断密码是否输入,如果输入了,再判断格式是否正确
                      if(password == "" —— password == null){
                            errors += "\n密码必须输入";
                      }else if(! /^\w{6,20}$/.test(password)) {
                            errors += "\n密码必须是字母和数字,长度为620之间"
                      }
                      //判断确认密码是否输入,如果输入了,再判断格式是否正确
                      if(repassword == "" —— repassword == null){
                                errors += "\n确认密码必须输入";
                      }else if(! /^\w{6,20}$/.test(repassword)) {
                            errors += "\n确认密码必须是字母和数字,长度为620之间"
                      }
                      //判断确认密码和密码是否相同
                    if(repassword ! = password){
                          errors += "\n确认密码和密码必须相同";
                    }
                    //年龄不是必须字段,只需要判断格式是否正确
                    if(age ! = "" && ! /^[0-1]? [0-9]? [0-9]$/.test(age)){
                          errors += "\n请输入正确的年龄格式"
                    }
                    //出生日期不是必须字段,只需要判断格式是否正确
                    if( birth ! = "" && ! /^19\d\d\-[0-1]\d\-[0-3]\d$/.test(birth) &&
                          !/^20[0-1]\d\-[0-1]\d\-[0-3]\d$/.test(birth)){
                          errors += "\n请输入正确的生日格式(1988-03-31"
                    }
                    //邮箱地址不是必须字段,只需要判断格式是否正确
                    if(email ! = "" && ! /^[a-zA-Z][a-zA-Z0-9._-]*@([a-zA-Z0-9-_]+.)+
                    (com—gov—net—com.cn—edu.cn)$/.test(email)){
                          errors += "\n请输入正确的邮箱地址"
                    }
                    if(errors == ""){
                          return true;
                    }else{
                          alert(errors);
                          return false;
                    }
              }
      </script>
  </head>
  <body>
      <form action="aa" method="post" onSubmit="return validate(this)">
      <table>
              <tr>
                      <td>用户名:</td>
                      <td><input type="text" name="username"></td>
              </tr>
              <tr>
                      <td>密码:</td>
                      <td><input type="password" name="password"></td>
              </tr>
              <tr>
                      <td>确认密码:</td>
                      <td> <input type="password" name="repassword"></td>
              </tr>
              <tr>
                      <td>年龄: </td>
                      <td><input type="text" name="age"></td>
              </tr>
              <tr>
                      <td>出生日期: </td>
                      <td><input type="text" name="birth"></td>
              </tr>
                      <tr>
                              <td>邮箱地址:</td>
                              <td><input type="text" name="email"></td>
                      </tr>
                      <tr>
                              <td></td>
                              <td><input type="submit" value="提交"></td>
                      </tr>
                </table>
                </form>
          </body>
          </html>

现在打开用户注册页,不输入任何数据,单击“提交”按钮,页面将提示未按要求进行输入的错误信息,如图4.8所示。

因为程序要求用户名、密码、确认密码必须输入,所以会提示错误信息。假如输入非法的数据,单击“提交”按钮,页面将会提示按照要求进行输入的错误信息,如图4.9所示。

图4.8 提示用户进行输入

图4.9 提示用户输入合法信息

客户端输入校验主要的功能是用来过滤正常用户的错误操作,要构建健壮的Web应用还必须提供服务器端输入校验。