首页 前端知识 JQuery 表单验证框架

JQuery 表单验证框架

2024-06-02 09:06:27 前端知识 前端哥 307 222 我要收藏

一、表单验证的好处

在做网站开发时,我们经常要对用户输入的内容进行约束,数据保存到服务器之前,通常要对数据格式进行检查,比如,电话号码、邮箱格式是否正确、用户名是否唯一等等。而在服务端做这种数据验证会大大加大服务器的负载,造成服务器的压力。因此我们通常会将数据验证放在客户端。客户端做表单验证的优点有以下两点:

  1. 减轻服务器的压力。
  2. 保证输入的数据符合要求。

二、JQuery Validate 简介

JQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API。所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言。

三、使用方法

3.1 下载

JQuery Validate 的下载地址:

官网下载地址:https://jqueryvalidation.org/

github地址: Release 1.19.5 · jquery-validation/jquery-validation · GitHub

3.2 项目中引入相关js文件

在在项目相关文件夹中放入Jquery和Jquery validate的js文件。

因为JQuery Validate,是基于Jquery框架的,所以使用之前我们需要导入jquery相关的js文件,而且一定要在导入Jquery validate文件之前导入。

3.3 在表单中添加相关验证需要的信息

下面是示例代码:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
    <script src="js/jquery-1.4.3.js" type="text/javascript"></script>
    <script src="js/jquery.validate.min.js" type="text/javascript"></script>
    <script src="js/index_check.js" type="text/javascript"></script>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="hello-servlet">Hello Servlet</a>
        <form id="register_form">
            <p>
                邮箱:<input type="text" name="email" id="text_email" >
                <label for="text_email" style="color:blue" class="error"></label>
            </p>
            <p>
               密码: <input type="text" name="password" id="text_password" >
                <label for="text_password" style="color:blue" class="error"></label>
            </p>
            <p>
                重复密码: <input type="text" name="re_password" id="text_re_pwd" >
                <label for="text_re_pwd" style="color:blue" class="error"></label>
            </p>
            <input type="submit" value="提交">
        </form>
</body>
</html>

说明:

  1. 引入的index_check.js 是写具体验证代码的js文件
  2. input中的name属性是必备的,后面做验证的时候需要使用name属性值。
  3. id 必备,后面自定义错误消息展示需要和id对应。
  4. label标签,Jquery validate验证默认错误消息展示是展示在label标签中。
  5. label标签中的for 要与输入框中的id对应,表示此出是为对应id的输入框显示错误消息的。
  6. label标签中的class="error",会通过这个定位标签,显示错误消息。

3.4 编写验证代码

在index_check.js文件中添加如下代码:

$(document).ready(function(){
    // 根据id找到需要做验证的form表单
    $("#register_form").validate({

        // 设定验证规则
        rules:{
            // 表示为name值为email的input输入框设置验证规则
            email:{
                // true表示此项为必填项
                required:true,
                // 此处的true表示必须满足email邮箱格式要求
                email: true
            },

            // 表示为name值为phone的input输入框设置验证规则
            password:{
                // 此处的true表示此项为必填项
                required: true,
                // 此处表示,密码必须是6-20位
                rangelength:[6,20]
            },
            re_password:{
                // 此处的true表示此项为必填项
                required: true,
                // 此处表示要和id位text_password 中输入的内容一致
                equalTo:"#text_password"
            }
        },
        // 设定不满足验证规则时展示的错误信息
        messages:{
            email:{
                required:"请输入邮箱",
                email:"请输入正确的Email格式"
            },
            password:{
                required:"请输入密码",
                rangelength: "密码必须是6-20位"
            },
            re_password: {
                required:"请重复密码",
                equalTo: "两次密码不一致"
            }
        }

    })
});

3.5 展示效果
  1. 页面初始效果

  1. 当什么都不输入时,直接提交表单

  1. 当输入内容不满足验证规则时

3.6 默认校验规则

序号

规则

描述

1

required:true

必须输入的字段。

2

remote:"check.php"

使用 ajax 方法调用 check.php 验证输入值。

3

email:true

必须输入正确格式的电子邮件。

4

url:true

必须输入正确格式的网址。

5

date:true

必须输入正确格式的日期。日期校验 ie6 出错,慎用。

6

dateISO:true

必须输入正确格式的日期(ISO),

例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。

7

number:true

必须输入合法的数字(负数,小数)。

8

digits:true

必须输入整数。

9

creditcard:

必须输入合法的信用卡号。

10

equalTo:"#field"

输入值必须和 #field 相同。

11

accept:

输入拥有合法后缀名的字符串(上传文件的后缀)。

12

maxlength:5

输入长度最多是 5 的字符串(汉字算一个字符)。

13

minlength:10

输入长度最小是 10 的字符串(汉字算一个字符)。

14

rangelength:[5,10]

输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。

15

range:[5,10]

输入值必须介于 5 和 10 之间。

16

max:5

输入值不能大于 5。

17

min:10

输入值不能小于 10。

3.6 异步验证

通常我们在验证表单时需要访问服务器,根据服务器的响应做进一步处理,比如在注册的时候,我们输入的邮箱经常要去服务器查一下看这个邮箱是否注册过了。 Jquery validate 中使用 ajax 方式进行验证,默认会提交当前验证的值到远程地址,如果需要提交其他的值,可以使用 data 选项。

remote: {
    url: "check-email.php",     //后台处理程序
    type: "post",               //数据发送方式
    dataType: "json",           //接受数据格式   
    data: {                     //要传递的数据
        username: function() {
            return $("#username").val();
        }
    }
}

远程地址只能输出 "true" 或 "false",不能有其他输出。

四、综合案例:当当网中注册页面表单验证

4.1 注册页面jsp 
<%@page contentType="text/html;charset=utf-8" isELIgnored="false"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>用户注册 - 当当网</title>
    <link href="../css/login.css" rel="stylesheet" type="text/css" />
    <link href="../css/page_bottom.css" rel="stylesheet" type="text/css" />
    <script src="../js/jquery-1.4.3.js" type="text/javascript"></script>
    <script type="text/javascript" src="../js/jquery.validate.min.js"></script>
    <script type="text/javascript" src="../js/user_check.js"></script>

  </head>
  <body>
    <%@include file="../common/head1.jsp"%>
      <div class="login_step">
        注册步骤:
        <span class="red_bold">1.填写信息</span> > 2.验证邮箱 > 3.注册成功
      </div>
      <div class="fill_message">
        <form name="ctl00" method="post" action="userAction" id="register_form">
          <%--				当提交表单之后,会将数据发送给userAction对应Controller中的register方法--%>
            <input type="hidden" name="method" value="register"/>
            <h2>
              以下均为必填项
            </h2>
            <table class="tab_login" >
              <tr>
                <td valign="top" class="w1">
                  请填写您的Email地址:
                </td>
                <td>
                  <input name="user.email" type="text" id="email" class="text_input" />
                  <div class="text_left" id="emailValidMsg">
                    <p>
                      请填写有效的Email地址,在下一步中您将用此邮箱接收验证邮件。
                    </p>
                    <p>
                      <label for="email" style="color:red" class="error"></label>
                    </p>


                  </div>

                </td>
              </tr>
              <tr>
                <td valign="top" class="w1">
                  设置您在当当网的昵称:
                </td>
                <td>
                  <input name="user.nickname" type="text" id="nickName" class="text_input" />
                  <div class="text_left" id="nickNameValidMsg">
                    <p>
                      您的昵称可以由小写英文字母、中文、数字组成,
                    </p>
                    <p>
                      长度4-20个字符,一个汉字为两个字符。
                    </p>
                    <p>
                      <label for="nickName" style="color:red" class="error"></label>
                    </p>

                  </div>
                </td>
              </tr>
              <tr>
                <td valign="top" class="w1">
                  设置密码:
                </td>
                <td>
                  <input name="user.password" type="password" id="password"
                    class="text_input" />
                  <div class="text_left" id="passwordValidMsg">
                    <p>
                      您的密码可以由大小写英文字母、数字组成,长度6-20位。
                    </p>
                    <label for="password" style="color:red" class="error"></label>
                  </div>
                </td>
              </tr>
              <tr>
                <td valign="top" class="w1">
                  再次输入您设置的密码:
                </td>
                <td>
                  <input name="password1" type="password" id="txtRepeatPass"
                    class="text_input"/>
                  <div class="text_left" id="repeatPassValidMsg">
                    <label for="txtRepeatPass" style="color:red" class="error"></label>
                  </div>
                </td>
              </tr>
              <tr>
                <td valign="top" class="w1">
                  验证码:
                </td>
                <td>
                  <img class="yzm_img" id='imgVcode' src="userAction?method=loadImageCode" />
                  <input name="number" type="text" id="txtVerifyCode"
                    class="yzm_input"/>
                  <div class="text_left t1">
                    <p class="t1">
                    <span id="vcodeValidMsg">请输入图片中的四个字母。</span>

                    <label for="txtVerifyCode" style="color:red" class="error"></label>
                    <a href="javascript:;" id="change" >看不清楚?换个图片</a>
                    </p>
                    </div>
                    </td>
                    </tr>
                    </table>

                    <div class="login_in">

                    <input id="btnClientRegister" class="button_1" name="submit" onclick="return confirm('确认要注册吗?')" type="submit" value="注 册"/>
                    <p id="regist.info" style="color:red"></p>
                    </div>
                    </form>
                    </div>
                    <%@include file="../common/foot1.jsp"%>
                    </body>
                    </html>

4.2 验证js文件
$(document).ready(function(){

  $("#change").click(function (){
    $("#imgVcode").attr('src',"userAction?method=loadImageCode&a="+new Date().getTime());
  });
  $("#register_form").validate({
    errorClass: "error",
    rules:{
      "user.nickname":{
        required:true,
        rangelength: [4,20]
      },
      "user.email":{
        required:true,
        email:true,
        remote:{
          type:"GET",
          url:"userAction?method=checkEmail",
          data:{
            "email":function (){
              return $("#email").val();
            }
          }
        }

      },
      "user.password":{
        required:true,
        rangelength:[6,20]
      },
      "password1":{
        required:true,
        equalTo:"#password"
      },
      "number":{
        required:true,
        remote:{
          type: "GET",
          url: "userAction?method=checkCode",
          data:{
            number: function (){
              return $("#txtVerifyCode").val()
            }
          }
        }
      }
    },
    messages:{
      "user.email":{
        required:"请输入邮箱",
        email:"E-Mail格式不正确",
        remote: "邮箱已经被注册"
      },
      "user.nickname": {
        required:"请输入昵称",
        rangelength:"请输入4-20位字符作为昵称"
      },
      "user.password":{
        required:"请输入密码",
        rangelength:"密码必须是6-20位字符"
      },
      "password1":{
        required:"请确认密码",
        equalTo: "两次输入的密码不一致"
      },
      "number": {
        required:"请输入验证码",
        remote: "验证码不正确"
      }


    }
  });
})

4.3 后台处理验证的controller
/**
* 检查邮箱是否可以使用
* @param request
* @param response
*/
public void checkEmail(HttpServletRequest request,HttpServletResponse response){
    try {
        PrintWriter pw = response.getWriter();
        String email = request.getParameter("email");

        UserService service = new UserServiceImpl();
        boolean result = service.getUserByEmail(email);
        pw.println(result);
    } catch (IOException e) {
        e.printStackTrace();
    }


}

/**
* 产生验证码
* @param request
* @param response
* @throws IOException
*/
public void loadImageCode(HttpServletRequest request,HttpServletResponse response) throws IOException {
    ImageCode ic = new ImageCode();
    BufferedImage image = ic.getImage();
    String text = ic.getText();
    request.getSession().setAttribute("imageCode",text);
    ImageCode.output(image,response.getOutputStream());
}

/**
* 异步,检查验证码是否输入正确
* @param request
* @param response
* @throws IOException
*/
public void checkCode(HttpServletRequest request ,HttpServletResponse response) throws IOException {
    PrintWriter pw = response.getWriter();
    String number = request.getParameter("number");
    String code = (String)request.getSession().getAttribute("imageCode");
    boolean result = number.equalsIgnoreCase(code);
    pw.println(result);

}

4.4 运行效果

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10536.html
标签
servlet
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!