有很多表单验证库和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>
答案 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中实时试用。