在日常項目中經常遇到日期輸入驗證,以前我遇到的項目是日期只能通過日歷控件來選擇,最近我同事遇到一個問題是日期除了可以通過日歷控件來輸入也可以手動來輸入,可是我們項目中居然沒有日期格式的驗證方法(備注:產品已經運行10多年了)。於是打算自己來寫一個日期驗證的方法,結果在網上一搜發現還有不少,經過驗證並且覺得比較好用的code 如下:
function isdate(str) { var result = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if (result == null) return false; var d = new Date(result[1], result[3] - 1, result[4]); return (d.getFullYear() == result[1] && d.getMonth() + 1 == result[3] && d.getDate() == result[4]); } function isdatetime(str) { var result = str.match(/^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/); if (result == null) return false; var d = new Date(result[1], result[3] - 1, result[4], result[5], result[6], result[7]); return (d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d.getDate() == result[4] && d.getHours() == result[5] && d.getMinutes() == result[6] && d.getSeconds() == result[7]); } function istime(str) { var a = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/); if (a == null) { return false; } if (a[1] >= 24 || a[3] >= 60 || a[4] >= 60) { return false } return true; } function compareDate(d1, d2) { return ((new Date(d1.replace(/-/g, "\/"))) < (new Date(d2.replace(/-/g, "\/")))); }
按理說,項目一旦開始就應該有一些通用的組件(方法)比如這里的日期驗證,還有email格式驗證 等等。(吐個槽,前一段時間有個任務是修改eamil的格式,按理說驗證email的格式在js里面應該只有一個方法啊,但是經過項目調查后發現有大概10個地方都在驗證email格式是否正確,也就是說我要改這個10個地方,如果少改了一個地方就是一個bug。。。。。。,項目架構如此,該問bug能不少嗎?產品質量能提高嗎?)。
我也經過過設計模式,設計原則的時代,近10年我開發的理念是“為復用而開發,為使用而組裝”,code的復用度將是項目和產品的一個重要的技術指標。