Validate.js
一个轻量级 JavaScript 表单验证插件

下载

无依赖,压缩后仅2kb,可自定义使用!

功能:

安装和用法

在你的源码中嵌入以下 JavaScript:

<script type="text/javascript" src="validate.min.js"></script>

根据需求创建验证对象。该代码需处于 /body 结束之前的 script 标签中。原因是表单所在的DOM需要加载完,你添加的验证规则才能生效。


var validator = new FormValidator('example_form', [{
    name: 'req',
    display: 'required',
    rules: 'required'
}, {
    name: 'alphanumeric',
    rules: 'alpha_numeric'
}, {
    name: 'password',
    rules: 'required'
}, {
    name: 'password_confirm',
    display: 'password confirmation',
    rules: 'required|matches[password]'
}, {
    name: 'email',
    rules: 'valid_email',
    depends: function() {
        return Math.random() > .5;
    }
}, {
    name: 'minlength',
    display: 'min length',
    rules: 'min_length[8]'
}], function(errors, event) {
    if (errors.length > 0) {
        // Show the errors
    }
});
            

FormValidator

new FormValidator(formName, fields, callback)

FormValidator 对象被添加到 window 上。创建后,当名称为 formName 的表单提交时将验证字段。

formName 必须是一个有效的 form name 属性。

<form name="example_form"></form>

在表单提交时,fields 数组会被执行验证。该数组必须包含以下对象属性:

name(必须)

表单元素的 name属性。


var validator = new FormValidator('example_form', [{
    name: 'req',
    display: 'required',
    rules: 'required'
}, {
    name: 'alphanumeric',
    rules: 'alpha_numeric'
}, {
    name: 'password',
    rules: 'required'
}, {
    name: 'password_confirm',
    display: 'password confirmation',
    rules: 'required|matches[password]'
}, {
    name: 'email',
    rules: 'valid_email',
    depends: function() {
        return Math.random() > .5;
    }
}, {
    name: 'minlength',
    display: 'min length',
    rules: 'min_length[8]'
}], function(errors, event) {
    if (errors.length > 0) {
        // Show the errors
    }
});
            

display(可选)

出现在错误信息中的字段名称。如果不存在,将会使用 name 参数代替。

例如:如果字段名称是 user,你可以选择用 “用户名” 显示。

rules(必须)

一个或多个规则,用"|"连接。

例如:required|min_length[8]|matches[password_confirm]

depends(可选)

字段验证前执行的一个函数。如果函数返回 false,说明字段不符合声明的规则。


depends: function(field) {
  return Math.random() > .5;
}
            

验证完成后会触发一个回调。这个回调应该有两个参数。

errors

表单验证对象错误的数组。如果 length > 0, 表单验证失败。

这个数组最多包含4个属性:

  1. id: 表单元素的id属性。
  2. name: 表单元素的name属性。
  3. message: 显示的错误信息。
  4. messages: 每个验证错误的字段,所指定显示的错误信息。
  5. rule: 触发该错误的验证规则。

event

如果浏览器支持,表单提交时将传入event。


function(errors, event) {
    if (errors.length > 0) {
        var errorString = '';

        for (var i = 0, errorLength = errors.length; i < errorLength; i++) {
            errorString += errors[i].message + '
'; } el.innerHTML = errorString; } }

自定义验证规则

validate.js 支持自定义验证规则。它运行你扩展 validate.js 来满足你的需求。一个常见的例子就是检查密码强度。

首先,你需要为该字段添加规则。必须以“callback_”开头。


depends: function(field) {
  return Math.random() > .5;
}
            

然后你必须调用 FormValidator 实例的 registerCallback 方法,该方法具有两个参数,自定义规则的名称和带有一个参数的函数。这个参数就是字段的值。如果这个值通过了你的自定义验证,返回 true,否则返回 false。你可以用 setMessage 为这个规则设置一个信息,如下。


validator.registerCallback('check_password', function(value) {
    if (passwordIsStrong(value)) {
        return true;
    }

    return false;
})
.setMessage('check_password', 'Please choose a stronger password using at least 1 number.');
            

Callbacks 将会按照下面的规则执行:

  1. 如果存在 required 规则,callback将会触发一次,忽略其他验证规则。
  2. 如果字段不必填,并且时空值,callback不会被触发,除非遇到 3 这种情况。
  3. 如果先于"!",总是会触发回调。例如规则,'!callback_myCustomCallback'

可用的方法

setMessage

validator.setMessage(rule, message)

在validate.js顶部,所有默认的错误信息都在 defaults 对象中。如果你想改变一个信息,使其应用广泛,你可以在源码中这样操作。如果你想改变一个表单的信息,在 FormValidator 实例中用这个方法。当设置一个新信息时,你需要用 %s, 它会在表单数组中被 display 参数替换掉。

validator.setMessage('required', 'You must fill out the %s field.');

registerCallback

validator.registerCallback(rule, callback)

在一个字段数组中用匹配一个自定义的规则,并触发一个回调。


depends: function(field) {
  return Math.random() > .5;
}
            

registerConditional

validator.registerConditional(name, callback)

一个轮询语句的依赖函数,验证一个是否声明的指定字段。


{
    name: 'first_name',
    rules: 'required',
    depends: 'checkForRandomNumber'
}
            

可用的规则

规则 描述 参数 例子
required 如果表单元素为空则返回false no
matches 如果表单元素的值不匹配参数之一,则返回false。 yes matches[other_element]
valid_email 如果表单元素的值不是一个正确的电子邮件地址,则返回false。 no
valid_emails 多个值被逗号分隔,如果有一个值是无效的电子邮件地址,则返回false。 no
min_length 如果表单元素的值比指定位数少,则返回false。 yes min_length[6]
max_length 如果表单元素的值比指定位数多,则返回false。 yes max_length[8]
exact_length 如果表单元素值的位数与给定位数不一致,则返回false。 yes exact_length[4]
greater_than 如果表单元素值比指定参数小,则返回false。 yes greater_than[10]
less_than 如果表单元素值比指定参数大,则返回false。 yes less_than[2]
alpha 如果表单元素包含任何指定字符,则返回false。 no
alpha_numeric 如果表单元素包含任何指定字母数字组成的字符,则返回false。 no
alpha_dash 如果表单元素包含任何指定字母数字组成的字符、下划线、标点,则返回false。 no
numeric 如果表单元素包含任何指定数字字符,则返回false。 no
integer 如果表单元素包含任何一个整型字符,则返回false。 no
decimal 如果表单元素包含任何小数,则返回false。 no
is_natural 如果表单元素包含任何一个自然数,则返回false。0, 1, 2, 3,等。 no
is_natural_no_zero 如果表单元素包含任何一个自然数(不包括0),则返回false。1, 2, 3,等。 no
valid_ip 如果输入的IP地址无效,则返回false。 no
valid_base64 如果输入的字符包含任何Base64字符,则返回false。 no
valid_credit_card 如果输入的字符不是有效的信用卡号,则返回false。 no
valid_url 如果输入的字符不是有效的url,则返回false。 no
is_file_type 如果输入的文件不在参数(用逗号隔开的数组)范围内,则返回false。 yes is_file_type[gif,png,jpg]