diff --git a/.luacheckrc b/.luacheckrc
index 06bda7bc0fe485b37fc22d6a506f372dbc501b25..62d839a328ec4c2f1bccf85da49c511590c34b9c 100644
--- a/.luacheckrc
+++ b/.luacheckrc
@@ -32,6 +32,7 @@ files["package/**/check_site.lua"] = {
 		"need_chanlist",
 		"need_domain_name",
 		"need_number",
+		"need_number_range",
 		"need_one_of",
 		"need_string",
 		"need_string_array",
diff --git a/scripts/check_site.lua b/scripts/check_site.lua
index 4e78437aecc8b9a4d366b34d833210078b352e06..dd33bf52e1f92194dd6852ab003c52e5776cf80e 100644
--- a/scripts/check_site.lua
+++ b/scripts/check_site.lua
@@ -289,6 +289,19 @@ function M.need_number(path, required)
 	return need_type(path, 'number', required, 'be a number')
 end
 
+function M.need_number_range(path, min, max, required)
+	local val = need_type(path, 'number', required)
+	if not val then
+		return nil
+	end
+
+	if val < min or val > max then
+		var_error(path, val, "be in range [" .. min .. ", " .. max .. "]")
+	end
+
+	return val
+end
+
 function M.need_boolean(path, required)
 	return need_type(path, 'boolean', required, 'be a boolean')
 end