diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/luci-base/htdocs/luci-static/resources/cbi.js | 41 | ||||
-rw-r--r-- | modules/luci-base/luasrc/cbi/datatypes.lua | 45 |
2 files changed, 86 insertions, 0 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index 8a3cb6fca..4b7227f1a 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -322,6 +322,47 @@ var cbi_validators = { 'phonedigit': function() { return (this.match(/^[0-9\*#!\.]+$/) != null); + }, + 'timehhmmss': function() + { + return (this.match(/^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$/) != null); + }, + 'dateyyyymmdd': function() + { + if (this == null) { + return false; + } + if (this.match(/^(\d\d\d\d)-(\d\d)-(\d\d)/)) { + var year = RegExp.$1; + var month = RegExp.$2; + var day = RegExp.$2 + + var days_in_month = [ 31, 28, 31, 30, 31, 30, 31, 31, 30 , 31, 30, 31 ]; + function is_leap_year(year) { + return ((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0); + } + function get_days_in_month(month, year) { + if ((month == 2) && is_leap_year(year)) { + return 29; + } else { + return days_in_month[month]; + } + } + /* Firewall rules in the past don't make sense */ + if (year < 2015) { + return false; + } + if ((month <= 0) || (month > 12)) { + return false; + } + if ((day <= 0) || (day > get_days_in_month(month, year))) { + return false; + } + return true; + + } else { + return false; + } } }; diff --git a/modules/luci-base/luasrc/cbi/datatypes.lua b/modules/luci-base/luasrc/cbi/datatypes.lua index 52f90afee..4c003be2a 100644 --- a/modules/luci-base/luasrc/cbi/datatypes.lua +++ b/modules/luci-base/luasrc/cbi/datatypes.lua @@ -341,3 +341,48 @@ end function phonedigit(val) return (val:match("^[0-9\*#!%.]+$") ~= nil) end + +function timehhmmss(val) + return (val:match("^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$") ~= nil) +end + +function dateyyyymmdd(val) + if val ~= nil then + yearstr, monthstr, daystr = val:match("^(%d%d%d%d)-(%d%d)-(%d%d)$") + if (yearstr == nil) or (monthstr == nil) or (daystr == nil) then + return false; + end + year = tonumber(yearstr) + month = tonumber(monthstr) + day = tonumber(daystr) + if (year == nil) or (month == nil) or (day == nil) then + return false; + end + + local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } + + local function is_leap_year(year) + return (year % 4 == 0) and ((year % 100 ~= 0) or (year % 400 == 0)) + end + + function get_days_in_month(month, year) + if (month == 2) and is_leap_year(year) then + return 29 + else + return days_in_month[month] + end + end + if (year < 2015) then + return false + end + if ((month == 0) or (month > 12)) then + return false + end + if ((day == 0) or (day > get_days_in_month(month, year))) then + return false + end + return true + end + return false +end + |