legalize.js, 浏览器的JavaScript对象验证+ node

分享于 

16分钟阅读

GitHub

  繁體 雙語
JavaScript object validation for browsers + node
  • 源代码名称:legalize.js
  • 源代码网址:http://www.github.com/paypal/legalize.js
  • legalize.js源代码文档
  • legalize.js源代码下载
  • Git URL:
    git://www.github.com/paypal/legalize.js.git
    Git Clone代码到本地:
    git clone http://www.github.com/paypal/legalize.js
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/paypal/legalize.js
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Legalize.js

    领导维护者: Warnke

    Build Status

    Legalize.js 是一个执行域对象验证的库。 对网站窗体执行 它为浏览器优化,但也可以在NodeJS环境中在服务器端使用。

    插件生成

    
    npm install
    
    
    grunt build
    
    
    
    

    将在 dist/legalize.min.js 中构建库。 它大约英镑 7KB minified 英镑

     
    npm check
    
    
    
     

    将执行单元测试并检查代码覆盖率( 报告将在 coverage/lcov-report/index.html 中为 genereated )。 接受的阈值为 ≥ 90%

    在浏览器中使用它

    <scriptsrc="legalize.min.js"></script>
    <script>var validationResult =Legalize.validate("given.something", Legalize.string().url());</script>

    使用 require.js

    库具有 AMD ( 异步模块定义 ),因此它与AMD装载器( 如 require.js. )

    在NodeJS中使用它

    var Legalize =require("legalize");var validationResult =Legalize.validate(Math.PI, Legalize.number().integer());

    快速教程

    合法化基本上由 Legalize.validate 和一组架构构建器组成。 对模式验证一个值,并返回一个具有合法值的对象,错误和警告消息( 如果有任何)。

    你可以通过以下方式验证对象:

    var personSchema = {
     firstName:Legalize.string().minLength(1).maxLength(30).required(),
     lastName:Legalize.string().minLength(1).maxLength(30).required(),
     age:Legalize.number().integer().min(18),
     sex:Legalize.string().sanitizeBefore(function (value) {
     value.toLowerCase();
     }).valid("male", "female").optional(),
    };var validationResult =Legalize.validate({
     firstName:"Alexander",
     lastName:"Carnicero",
     age:27}, personSchema);if (validationResult.error) {
     // report error here} else {
     validationResult.warnings.forEach(function (warning) {
     // report warning });
     // validationResult.value contains validated value}

    API

    validate(value, schema, [options], [callback])

    根据给定的schema 验证给定的value。 可选接受对象specifiying选项( 查看 below ) 和回调。 如果给定 callback,函数将返回 undefined 并调用给定的回调 callback(error, value, warnings)

    返回值是一个包含 errorvaluewarnings 属性的对象:

    • value 包含经过验证的值,从未验证的所有内容中删除
    • error 包含一个或者多个致命错误,这些错误使验证拒绝给定值
    • warnings 包含警告的array ( 如果有的话)
    命令行选项
    • strict ( 默认:true )
      • 如果设置为 false,验证将首先尝试将值转换为指定类型。 将发出警告。
      • 如果设置为 true,验证将拒绝错误类型的值。
    • warnOnInvalidOptionals ( 默认:true )
      • 如果值无法验证但是可选的或者具有默认值,则将为失败的验证发出警告。
    • presence ( 默认值:"可选)
      • 对象中关键点的默认存在。
    • allowUnknown ( 默认:false )
      • 是否允许在对象中使用未知键。
    • stripUnknown ( 默认:true )
      • 是否应通过或者删除未知密钥。
    • warnUnknown ( 默认:true )
      • 如果设置 allowUnknown - 在遇到未知密钥时是否应发出警告。

    以下是 options 参数的架构:

    var optionSchema =compile({
     allowUnknown:publiclyExposedInterface.bool().default(false),
     stripUnknown:publiclyExposedInterface.bool().default(true),
     warnUnknown:publiclyExposedInterface.bool().default(true),
     strict:publiclyExposedInterface.bool().default(true),
     warnOnInvalidOptionals:publiclyExposedInterface.bool().default(true),
     presence:publiclyExposedInterface.any()
    . valid(OPTIONAL).valid(REQUIRED).valid(FORBIDDEN)
    . default(OPTIONAL)
    });
    验证顺序

    验证按以下顺序执行:

    • 检查值是否存在( 以满足 forbidden() )
    • sanitizeBefore() ( 以与指定的顺序相同的顺序调用多个 sanitizeBefore() 函数)
    • alias() 被应用
    • 如果不是 any(),则为type类型( object()string()boolean() ) 检查或者强制( 取决于 options.strict )
    • allow() 已经检查
    • valid() 已经检查
    • invalid() 已经检查
    • 应用所有其他检查
    • 应用 sanitize() ( 按照指定的顺序调用多个 sanitize() 函数)

    架构生成器

    Legalize 对象提供了一系列架构构建器,你可以使用它们来实际定义你的模式。 第一个架构生成器指定常规类别。 下一个架构生成器可以链接。 哪些可用的选项由类别决定:

    合法化。类别 ( )。 链 ( ) 链( )。 链 ( )

    除了 alternatives,每个架构生成器还支持来自 any 生成器的所有链:

    
    Legalize.any().valid(1).valid(2).valid(3)
    
    
    
    

    工作以及

    
    Legalize.number().valid(1).valid(2).valid(3)
    
    
    
    

    大多数链可以折叠:

    
    Legalize.number().valid(1, 2, 3)
    
    
    
    
    Shorthands

    object().keys()alternatives()string().match() 有 shorthands:

    Legalize.object().keys({
     x:Legalize.string().numeric()
    })// is the same as{ x:Legalize.string().numeric() }

    Legalize.alternatives(
     Legalize.string().numeric(),
     Legalize.number().integer()
    )// is the same as[ Legalize.string().numeric(),
     Legalize.number().integer() ]

    string().match(/^[0-9]+$/)// is the same as/^[0-9]+/

    i.e 你可以

    Legalize.validate("8934758039",/^$/);

    或者

    var schema = {
     character:/^[a-z]$/}

    代替

    var schema =Legalize.object().keys({
     character:Legalize.string().match(/^[a-z]$/)
    }

    不是 RegExpObject 或者 Array的每个值都将使用 valid() 进行转换。 这意味着:

    var schema =Legalize.object().valid(1, 2);

    可以表示为

    var schema = [ 1, 2]

    因为这将转化为

    var schema =Legalize.alternatives(
     Legalize.valid(1),
     Legalize.valid(2)
    );

    它最终和第一个表达式做了同样的事情。

    shorthand-示例

    代替

    var schema =Legalize.object().keys({
     firstName:Legalize.string().match(/^[A-Z][a-z]+$/),
     lastName:Legalize.string().match(/^[A-Z][a-z]+$/),
     sex:Legalize.any().valid("male").valid("female"),
    });

    你可以用

    var schema = {
     firstName:/^[A-Z][a-z]+$/,
     lastName:/^[A-Z][a-z]+$/,
     sex: [ "male", "female" ]
    };
    不使用 Shorthands

    Shorthands是快速构建架构的便捷方法。 但是,如果你想指定例如 default() 或者编写更复杂的模式,那么你需要使用适当的模式构建器。

    any

    any.alias({ alias → sanitized })

    获取一个对象,该对象提供从 alias 值到 sanitized 值的映射。

    alias()sanitizeBefore() 之前应用

    any.allow(...values)

    允许的值在不进行任何检查的情况下被接受。

    any.valid(...values)

    返回值- 如果指定了多个有效值,则只能接受其中的一个值。 在 alias()sanitizeBefore() 之后执行。

    any.invalid(...values)

    of一个值- 如果指定了更多的值,这些值将始终被拒绝,而不管它的他检查如何。

    any.satisfy(function : value -> bool)

    应用自定义验证功能。 value 正在作为第一个( 只有) 参数传递。 函数必须返回 true 或者 false ( 将来该函数还可能返回字符串或者复杂对象,这些字符串将用于错误报告)。

    any.required()

    根据需要在 object() 中标记密钥。

    any.optional()

    object() 中的键标记为可选。 如果要对无效的可选键发出警告,请使用 options.warnOnInvalidOptionals

    any.forbidden()

    将密钥标记为严格禁止。 否则,合法化将忽略它不知道的任何密钥。

    any.default(defaultValue)

    设置值的默认值。

    any.sanitize(function : value -> value)

    将消毒功能应用于已经验证的值( 所有检查后发生)。

    any.sanitizeBefore(function : value -> value)

    将消毒功能应用于未验证的值(。在所有检查之前,也在 alias() 之前发生)。

    func()

    值应为函数。 这里生成器没有任何特殊链。

    bool()/boolean()

    值应为布尔值。 这里生成器不引入任何特殊链。

    number()

    指定目标值应该是一个javascript数字。 请注意,javascript数字实际上是浮动的,无论。 使用链 integer() 将数值限制为整数值。

    number.min(number)number.max(number)number.lesser(number)number.greater(number)number.integer()

    string()

    string.minLength(integer)

    检查字符串是否具有给定的最小长度( 包含)。

    string.maxLength(integer)

    检查字符串是否具有给定的最大长度( 包含)。

    string.length(integer)

    检查字符串是否具有给定长度。

    string.match(regex)

    检查字符串是否与给定的正则表达式匹配。

    string.lowercase()

    检查字符串是否全部为 lowercase。 忽略非字母字符。

    string.uppercase()

    检查字符串是否全部大写。 忽略非字母字符。

    string.url()

    检查字符串是否包含 url。

    string.element()

    检查字符串是否引用文档中的元素,字符串为 id

    string.alphanum()

    检查字符串是否为 /^[a-zA-Z0-9]+$/

    string.numeric()

    检查字符串是否为数字( String(Number(value)) === String(value) )

    string.digits()

    检查字符串是否只包含数字。

    Array

    array.minLength(integer)array.maxLength(integer)array.length(integer)array.unique

    检查 array 是否只包含唯一值( 仅检查 string()number() 元素)。 在 unique() 中,"3"3 被视为相等。

    Object

    object.minLength(integer)object.maxLength(integer)object.length(integer)object.keys({keys})object.type(type)

    检查是否使用给定的构造函数构造了对象:

    Legalize.validate(/^...$/, object.type(RegExp));Legalize.validate(newWhatever, object.type(Whatever));
    object.pattern(regExp)

    allowUnknownstripUnknown 将接受匹配给定 Pattern的键,并将它们的关联值复制到合法的对象。

    alternatives(...alternatives)

    与/联接的区别

    Legalize的API受到 joi() API的启发,但它在各个方面都有不同。 有些,但并非全部,差异是:

    • 验证( )

      • Legalize 中没有 abortEarly 选项
      • JOI 中没有 warnOnInvalidOptionals 选项
    • 基本架构生成器

      • Legalize 中没有 date()
      • Legalize 中没有 binary()
    • 消毒

      • alias()JOI 中不可用
      • sanitize()JOI 中不可用
      • sanitizeBefore()JOI 中不可用
      • min() 以英镑 JOI 为单位,为 string()array()object() 为英镑 Legalize
      • 对于 max()
      • Legalize 中没有 array().sparse()

    JAVA  Javascript  bro  对象  浏览  browsers  
    相关文章