Validate表单验证插件

  1. validate基本介绍
  2. metadata的加入
  3. 行为与结构分离以及自定义验证信息
  4. 自定义验证规则
  5. 常用方法及注意问题

其中,第1跟第2都是jQuery.Validate的内置的消息,以样式名的方式进行验证虽然简单快捷。但臃肿了input标签,不利于日后修改。

第3使用单独的js脚本解决了HTML和验证规则的分离,好处是统一验证规范,方便日后维护

jQuery Validation插件的下载地址:http://jqueryvalidation.org/

一、validate基本介绍

Validation拥有如下特点:

1、内置验证规则:拥有必填、数字、E-Mail、URL和信用卡号码等19类内置验证规则。

2、自定义验证规则:可以很方便地自定义验证规则。

3、简单强大得验证信息提示:默认了验证信息提示,并提供自定义覆盖默认提示信息的功能。

4、实时验证:可以通过keyup或blur事件触发验证,而不仅仅在表单提交的时候验证。

默认校验规则

序号规则描述
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。

 

默认提示:

messages: {
    required: "This field is required.",
    remote: "Please fix this field.",
    email: "Please enter a valid email address.",
    url: "Please enter a valid URL.",
    date: "Please enter a valid date.",
    dateISO: "Please enter a valid date (ISO).",
    dateDE: "Bitte geben Sie ein gültiges Datum ein.",
    number: "Please enter a valid number.",
    numberDE: "Bitte geben Sie eine Nummer ein.",
    digits: "Please enter only digits",
    creditcard: "Please enter a valid credit card number.",
    equalTo: "Please enter the same value again.",
    accept: "Please enter a value with a valid extension.",
    maxlength: $.validator.format("Please enter no more than {0} characters."),
    minlength: $.validator.format("Please enter at least {0} characters."),
    rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
    range: $.validator.format("Please enter a value between {0} and {1}."),
    max: $.validator.format("Please enter a value less than or equal to {0}."),
    min: $.validator.format("Please enter a value greater than or equal to {0}.")
},

使用:

<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/jquery.validate-1.13.1.min.js"></script>
$("#myForm").validate();  //form的id
<form id="myForm" method="post" action="#">
        <fieldset>
            <legend>表单验证</legend>
            <p>
                <label for="username">用户名</label>
                <!--<input id="username" name="username" type="text" class="required" minlength="3">-->
                <!--required或者使用-->
                <input id="username" name="username" type="text" minlength="3" required>
            </p>
            <p>
                <label for="email">电子邮件</label>
                <input id="email" name="email" type="text" class="required email">
            </p>
            <p>
                <label for="url">网址</label>
                <input id="url" name="url" type="text" class="url">
            </p>
            <p>
                <label for="comment">评论</label>
                <textarea id="comment" name="comment" cols="20" rows="3" class="required"></textarea>
            </p>
            <p>
                <input type="submit" value="提交">
            </p>
        </fieldset>
    </form>
View Code

默认信息改中文:

jQuery.extend(jQuery.validator.messages, {
    required: "必选字段",
    remote: "请修正该字段",
    email: "请输入正确格式的电子邮件",
    url: "请输入合法的网址",
    date: "请输入合法的日期",
    dateISO: "请输入合法的日期 (ISO).",
    number: "请输入合法的数字",
    digits: "只能输入整数",
    creditcard: "请输入合法的信用卡号",
    equalTo: "请再次输入相同的值",
    accept: "请输入拥有合法后缀名的字符串",
    maxlength: jQuery.validator.format("请输入一个 长度最多是 {0} 的字符串"),
    minlength: jQuery.validator.format("请输入一个 长度最少是 {0} 的字符串"),
    rangelength: jQuery.validator.format("请输入 一个长度介于 {0} 和 {1} 之间的字符串"),
    range: jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
    max: jQuery.validator.format("请输入一个最大为{0} 的值"),
    min: jQuery.validator.format("请输入一个最小为{0} 的值")
});

推荐将文件放入messages_cn.js中,在文件中引用

<script src="js/messages_cn.js"></script>

二、metadata的加入

 jquery.metadata.js是一个支持固定格式解析的jquery插件,Validation插件将其很好地融合到验证规则编码中。

注意:低版本的validate没有内置metadata的支持,so,这种方法不推荐使用

使用:

<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/jquery.validate.js"></script>
<script src="js/jquery.metadata.js"></script>
$("#myForm").validate({meta:"validate"})
<form id="myForm" method="post" action="#">
        <fieldset>
            <legend>表单验证</legend>
            <p>
                <label for="username">用户名</label>
                <input id="username" name="username" type="text" class="{validate:{required:true,minlength:2}}">
            </p>
            <p>
                <label for="email">电子邮件</label>
                <input id="email" name="email" type="text" class="{validate:{required:true,email:true}}">
            </p>
            <p>
                <label for="url">网址</label>
                <input id="url" name="url" type="text" class="{validate:{url:true}}">
            </p>
            <p>
                <label for="comment">评论</label>
                <textarea id="comment" name="comment" cols="20" rows="3" class="{validate:{required:true}}"></textarea>
            </p>
            <p>
                <input type="submit" value="提交">
            </p>
        </fieldset>
    </form>

三、行为与结构分离以及自定义验证信息

 在validate()方法中增加rules属性,通过每个字段的name属性值来匹配验证规则。

$(function () {
        $("#myForm").validate({
            rules:{
                username:{
                    required:true,
                    minlength:3
                },
                email:{
                    required:true,
                    email:true
                },
                url:"url",
                comment:"required"
            },
            messages:{
                username:{
                    required:"请输入姓名",
                    minlength:"请至少输入两个字符"
                },
                email:{
                    required:"请输入电子邮件",
                    email:"请检查电子邮件的格式"
                },
                url:{
                    url:"请检查网址的格式"
                },
                comment:{
                    required:"请输入您的评论"
                }
            },
//            errorElement:"em",  默认为span标签不推荐更改
            success:function(element){
                $(element).html("&nbsp;").addClass("valid");
//                注意,此class不能为success。
            }
        });
    });
View Code
label.error{ background: url(images/unchecked.png) no-repeat 0px 0px; padding-left: 16px;}
label.valid{ background: url(images/checked.png) no-repeat 0px 0px; padding-left: 16px;}

四、自定义验证规则

<p>
  <label for="valcode">验证码</label>
  <input id="valcode" name="valcode" type="text">=7+9
</p>
$(function () {
        $("#myForm").validate({
            rules:{
                valcode:{
                    formula:"7+9"
                }
            }
        });
//        自定义一个验证方法
        $.validator.addMethod(
                "formula",function(value,element,param){
                    return value==eval(param);
                },
                '请输入数学公式计算后的结果'
        )
    });
View Code

正则表达:

。。。。。。

五、常用方法及注意问题

 1、替代默认的submit

//            代替默认的submit
//            submitHandler:function(form){
//                alert("submitted");
//                form.submit();
//            }
//            使用ajax方式
            submitHandler: function (form) {
                $(form).ajaxSubmit({
                    type: "post",
                    success: function (element) {
                        alert(element + "执行成功");
                    },
                    error: function (XmlHttpRequest, textStatus, errorThrown) {
                        alert(errorThrown + "添加失败");
                    }

                });
            }

2、只验证不提交

$("#myForm").validate({
    debug: true
});

3、全局设置默认值

//        设置所有表单只验证不提交
        $.validator.setDefaults({
            debug:true
        });
//        设置所有表单提交方式
        $.validator.setDefaults({
            submitHandler:function(form) {
                alert("submitted!");
                form.submit();
            }
        });
原文地址:https://www.cnblogs.com/zhaojieln/p/4267706.html