2011-12-21 84 views
3

有很多表單驗證庫和jQuery插件。雖然我找不到代碼合同庫,用於驗證函數參數。是否有JavaScript的代碼合同庫?

作爲一個例子,要在.NET中進行合同驗證,您可以使用未完成的Conditions library。我正在尋找類似於JavaScript的東西。我能找到的最接近的是Speks,但它的Node.js適合測試,而我需要將驗證烘焙到發佈代碼中。

我需要的驗證方法示例:檢查null,空,isstring,isnumber,長度,最小值,最大值,小於,大於,之間,不等於,不小於,不大於等等。

+0

PS:我知道jQuery Validation插件,但它用於表單驗證,並且在大約20kb的位置,它不是我想要加載到沒有窗體的頁面上的東西。 – 2011-12-21 23:24:25

+1

沒錯。我剛剛找到[jsContract](https://github.com/oyvindkinsey/jsContract),它有很多驗證,但它沒有流暢的接口,也沒有使用通用代碼合約術語。還有[JavaScript代碼合同庫](http://jstest.codeplex.com/wikipage?title=JavaScript%20Code%20Contract%20Library),它有一個流暢的界面,但它在如何處理空值時有一些怪癖。在初次提交之後,兩者都沒有更新。有沒有人成功地使用這些技術,或者有人將它們分爲更完整的庫? – 2011-12-22 01:07:52

回答

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'] 
}); 
+6

是的,目前我正在滾動我自己的。但它並不完美,沒有我需要的所有功能,而且它很難維持它。如果有一個廣泛使用和經過充分測試的庫,那麼我寧願使用它。 – 2011-12-21 23:45:18

+0

更不用說,執行更高級別的合同是非常平庸的:特別是當涉及到非指定傳播時。一旦您的合同超出一階訂單,滾動您自己的想法是一個糟糕的主意。 – 2015-05-29 21:20:35

1

我可能會使用QUnit通用的JavaScript測試。還可以查看Tim Disney的contracts.js,這可能會更具體到您的用例。

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 
} 
0

Sweet-contracts不正是你想要的。

Sweet-contracts是一個需要sweet.js的模塊,它使用宏將合約添加到語言中。這樣你就不必使用現有的(通常是不充分/低效的)語言結構來破壞你的合約。

sweet.js允許您創建可模塊化擴展語言的宏。 This blog post給出了一個很好的介紹宏和宏的力量。你可以在你的瀏覽器at this address中試試。

相關問題