Modul:Check isxn: Unterschied zwischen den Versionen

K
14 Versionen von wikivoyage:Modul:Check_isxn importiert
imported>Frietjes
(creating an isxn validator by copying code from Module:Citation/CS1)
 
K (14 Versionen von wikivoyage:Modul:Check_isxn importiert)
 
(13 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 51: Zeile 51:
]]
]]


function check_isbn( isbn_str )
function p._check_isbn( isbn_str, error_string )
if nil ~= isbn_str:match("[^%s-0-9X]") then return false; end -- fail if isbn_str contains anything but digits, hyphens, or the uppercase X
if nil ~= isbn_str:match("[^%s-0-9X]") then -- fail if isbn_str contains anything but digits, hyphens, or the uppercase X
return error_string;
end
isbn_str = isbn_str:gsub( "-", "" ):gsub( " ", "" ); -- remove hyphens and spaces
isbn_str = isbn_str:gsub( "-", "" ):gsub( " ", "" ); -- remove hyphens and spaces
local len = isbn_str:len();
local len = isbn_str:len();
   
   
if len ~= 10 and len ~= 13 then
if len ~= 10 and len ~= 13 then
return 'error';
return error_string;
end
end


if len == 10 then
if len == 10 then
if isbn_str:match( "^%d*X?$" ) == nil then return false; end
if isbn_str:match( "^%d*X?$" ) == nil then  
return is_valid_isxn(isbn_str, 10) and '' or 'error';
return error_string;  
end
return is_valid_isxn(isbn_str, 10) and '' or error_string;
else
else
local temp = 0;
local temp = 0;
if isbn_str:match( "^97[89]%d*$" ) == nil then return false; end -- isbn13 begins with 978 or 979; ismn begins with 979
if isbn_str:match( "^97[89]%d*$" ) == nil then -- isbn13 begins with 978 or 979; ismn begins with 979
return is_valid_isxn_13 (isbn_str) and '' or 'error';
return error_string;
end
return is_valid_isxn_13 (isbn_str) and '' or error_string;
end
end
end
end
Zeile 78: Zeile 84:
]]
]]


function check_ismn (id)
function p._check_ismn (id, error_string)
local handler = cfg.id_handlers['ISMN'];
local text;
local text;
local valid_ismn = true;
local valid_ismn = true;
Zeile 91: Zeile 96:
end
end


return valid_ismn and '' or 'error'
return valid_ismn and '' or error_string
end
end


Zeile 107: Zeile 112:
]]
]]


function check_issn(id)
function p._check_issn(id, error_string)
local issn_copy = id; -- save a copy of unadulterated issn; use this version for display if issn does not validate
local issn_copy = id; -- save a copy of unadulterated issn; use this version for display if issn does not validate
local handler = cfg.id_handlers['ISSN'];
local text;
local text;
local valid_issn = true;
local valid_issn = true;


if not id:match ('^%d%d%d%d%-%d%d%d[%dX]$') then
return error_string;
end
id=id:gsub( "[%s-–]", "" ); -- strip spaces, hyphens, and endashes from the issn
id=id:gsub( "[%s-–]", "" ); -- strip spaces, hyphens, and endashes from the issn


Zeile 121: Zeile 129:
end
end


return valid_issn and '' or 'error'
return valid_issn and '' or error_string
end
end
------------------------------< E N T R Y  P O I N T S >--------------------------------------------------====


function p.check_isbn(frame)
function p.check_isbn(frame)
return check_issn(frame.args[1] or frame:getParent().args[1])
return p._check_isbn(frame.args[1] or frame:getParent().args[1], frame.args['error'] or frame:getParent().args['error'] or 'error')
end
end


function p.check_ismn(frame)
function p.check_ismn(frame)
return check_issn(frame.args[1] or frame:getParent().args[1])
return p._check_ismn(frame.args[1] or frame:getParent().args[1], frame.args['error'] or frame:getParent().args['error'] or 'error')
end
end


function p.check_issn(frame)
function p.check_issn(frame)
return check_issn(frame.args[1] or frame:getParent().args[1])
return p._check_issn(frame.args[1] or frame:getParent().args[1], frame.args['error'] or frame:getParent().args['error'] or 'error')
end
end
return p