是否有JavaScript代码合同库?

时间:2011-12-21 23:19:00

标签: jquery validation javascript code-contracts

有很多表单验证库和jQuery插件。虽然我找不到代码契约库,但用于验证函数参数。

例如,要在.NET中进行合同验证,您可以使用未完成的Conditions library。我正在寻找类似于JavaScript的东西。我能找到的最接近的是Speks,但它适用于Node.js并且适合测试,而我需要将验证烘焙到发布代码中。

我需要的验证方法示例:检查null,empty,isstring,isnumber,length,min,max,value,less,greater,between,between,not equal,not less,not greater等。< / p>

5 个答案:

答案 0 :(得分:3)

这是一个运行时类型契约库,它采用了一些类似Haskell的语法:http://code.google.com/p/ristretto-js

答案 1 :(得分:2)

对于这个问题的实施,我印象非常深刻:

JavaScript Code Contract Libraries?

示例:

function syncTime(serverTime, now) {
  Verify.value(serverTime).always().isDate();   // Cannot be undefined or null.
  Verify.value(now).whenDefined().isDate();     // Cannot be null, but must be date when defined.

  //Code
}

答案 2 :(得分:1)

为什么不自己滚动图书馆?

使用策略模式,您可以轻松地针对特定值运行一系列方法。

这是一个半粗略的例子。这显然需要更多的错误处理和修改,但它为您可以构建的内容提供了一个想法。 http://jsfiddle.net/fBfgz/

var validator = (function() {
    // Available checks
    var types = {
        isNum: function(value) {
            return !isNaN(value);
        },

        isNull: function(value) {
            return value === null;
        }
    };

   return {
       validate: function (data) {

           var i, len, check, ret;
           for (i = 0, len = data.checks.length; i < len; i += 1) {

               if (types.hasOwnProperty(data.checks[i])) {
                   check = types[data.checks[i]]; 
                   ret = check(data.value);
                   alert(ret);
                   if (!ret) {
                       return false;
                   }
               }
           }
           return true;
       }
   };  
}());

validator.validate({ // will return true
    value: 32,
    checks: ['isNum']
});
validator.validate({ // will return false
    value: 32+'a',
    checks: ['isNum']
});

答案 3 :(得分:1)

我可能会将QUnit用于通用JavaScript测试。另请查看Tim Disney的contracts.js,这可能更具体针对您的用例。

答案 4 :(得分:0)

Sweet-contracts完全符合您的要求。

Sweet-contracts是一个需要sweet.js的模块,并使用宏将合同添加到语言中。这样,您就不必使用现有(通常不够/效率低下)的语言结构来破解合同。

sweet.js允许您创建可以模块化扩展语言的宏。 This blog post对甜蜜和宏的力量进行了很好的介绍。您可以在浏览器at this address中实时试用。