Module:Sandbox/trappist the monk/dab check

local type_specifier = {'TV series', 'TV programme', 'TV program', 'TV film', 'film', 'miniseries', 'serial', 'game show', 'talk show', 'web series'};

local function validate (dab)

local dab_no_specifier = '';

local count = 0;

for i, v in ipairs (type_specifier) do

dab_no_specifier, count = dab:gsub (v .. '$', '');

if 0 ~= count then

break; -- found and removed a specifier

end

end

if 0 == count then

return 'error: no type specifier';

end

dab_no_specifier = mw.text.trim (dab_no_specifier); -- remove trailing white space if there is any

local year = '';

local adj = '';

if dab_no_specifier:match ('^%d+ %D+') then

year, adj = dab_no_specifier:match ('^(%d+) (%D+)'); -- had year and country adjective

-- call to validate year

-- call to validate country adjective

return 'type specifier + adjective + year';

elseif dab_no_specifier:match ('^%d+$') then

year = dab_no_specifier:match ('^%d+'); -- had year

-- call to validate year

return 'type specifier + year ' .. year;

elseif dab_no_specifier:match ('^%D+$') then

adj = dab_no_specifier; -- had country adjective

-- call to validate country adjective

return 'type specifier + adjective ' .. adj;

elseif '' == dab_no_specifier then

return 'type specifier only'; -- no dab extensions

else

return 'error: malformed dab';

end

end

return {validate=validate};