Module:Citation/CS1/Date validation and Module:Citation/CS1/Date validation/sandbox: Difference between pages
Appearance
(Difference between pages)
Content deleted Content added
sync from sandbox; |
FlatLanguage (talk | contribs) if we select this, double check is not needed |
||
Line 1: | Line 1: | ||
--[[ |
|||
History of changes since last sync: 2024-08-17 |
|||
2025-05-25: make |date=Jan 0500, |date=0999–1000, |date=090–100 error, accept |date=Jan 500. |
|||
2025-05-25: make |date=2000-10-01|year=2010 error |
|||
]] |
|||
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >-------------------------------------- |
--[[--------------------------< F O R W A R D D E C L A R A T I O N S >-------------------------------------- |
||
]] |
]] |
||
Line 398: | Line 409: | ||
local patterns_t = { |
local patterns_t = { |
||
-- year-initial numerical year-month-day |
-- year-initial numerical year-month-day |
||
['ymd'] = {'^( |
['ymd'] = {'^([1-9]%d%d%d)%-(%d%d)%-(%d%d)$', 'y', 'm', 'd'}, |
||
-- month-initial: month day, year |
-- month-initial: month day, year |
||
['Mdy'] = {'^(%D-) +([1-9]%d?), +(( |
['Mdy'] = {'^(%D-) +([1-9]%d?), +(([1-9]%d%d%d?)%a?)$', 'm', 'd', 'a', 'y'}, |
||
-- month-initial day range: month day–day, year; days are separated by endash |
-- month-initial day range: month day–day, year; days are separated by endash |
||
['Md-dy'] = {'^(%D-) +([1-9]%d?)[%-–]([1-9]%d?), +((%d%d%d |
['Md-dy'] = {'^(%D-) +([1-9]%d?)[%-–]([1-9]%d?), +(([1-9]%d%d%d?)%a?)$', 'm', 'd', 'd2', 'a', 'y'}, |
||
-- day-initial: day month year |
-- day-initial: day month year |
||
['dMy'] = {'^([1-9]%d?) +(%D-) +(( |
['dMy'] = {'^([1-9]%d?) +(%D-) +(([1-9]%d%d%d?)%a?)$', 'd', 'm', 'a', 'y'}, |
||
-- year-initial: year month day; day: 1 or 2 two digits, leading zero allowed; not supported at en.wiki |
-- year-initial: year month day; day: 1 or 2 two digits, leading zero allowed; not supported at en.wiki |
||
-- ['yMd'] = {'^(( |
-- ['yMd'] = {'^(([1-9]%d%d%d?)%a?) +(%D-) +(%d%d?)$', 'a', 'y', 'm', 'd'}, |
||
-- day-range-initial: day–day month year; days are separated by endash |
-- day-range-initial: day–day month year; days are separated by endash |
||
['d-dMy'] = {'^([1-9]%d?)[%-–]([1-9]%d?) +(%D-) +((%d%d%d |
['d-dMy'] = {'^([1-9]%d?)[%-–]([1-9]%d?) +(%D-) +(([1-9]%d%d%d?)%a?)$', 'd', 'd2', 'm', 'a', 'y'}, |
||
-- day initial month-day-range: day month - day month year; uses spaced endash |
-- day initial month-day-range: day month - day month year; uses spaced endash |
||
['dM-dMy'] = {'^([1-9]%d?) +(%D-) +[%-–] +([1-9]%d?) +(%D-) +((%d%d%d |
['dM-dMy'] = {'^([1-9]%d?) +(%D-) +[%-–] +([1-9]%d?) +(%D-) +(([1-9]%d%d%d?)%a?)$', 'd', 'm', 'd2', 'm2', 'a', 'y'}, |
||
-- month initial month-day-range: month day – month day, year; uses spaced endash |
-- month initial month-day-range: month day – month day, year; uses spaced endash |
||
['Md-Mdy'] = {'^(%D-) +([1-9]%d?) +[%-–] +(%D-) +([1-9]%d?), +((%d%d%d |
['Md-Mdy'] = {'^(%D-) +([1-9]%d?) +[%-–] +(%D-) +([1-9]%d?), +(([1-9]%d%d%d?)%a?)$','m', 'd', 'm2', 'd2', 'a', 'y'}, |
||
-- day initial month-day-year-range: day month year - day month year; uses spaced endash |
-- day initial month-day-year-range: day month year - day month year; uses spaced endash |
||
['dMy-dMy'] = {'^([1-9]%d?) +(%D-) +(%d%d%d |
['dMy-dMy'] = {'^([1-9]%d?) +(%D-) +([1-9]%d%d%d?) +[%-–] +([1-9]%d?) +(%D-) +(([1-9]%d%d%d?)%a?)$', 'd', 'm', 'y', 'd2', 'm2', 'a', 'y2'}, |
||
-- month initial month-day-year-range: month day, year – month day, year; uses spaced endash |
-- month initial month-day-year-range: month day, year – month day, year; uses spaced endash |
||
['Mdy-Mdy'] = {'^(%D-) +([1-9]%d?), +(%d%d%d |
['Mdy-Mdy'] = {'^(%D-) +([1-9]%d?), +([1-9]%d%d%d?) +[%-–] +(%D-) +([1-9]%d?), +(([1-9]%d%d%d?)%a?)$', 'm', 'd', 'y', 'm2', 'd2', 'a', 'y2'}, |
||
-- these date formats cannot be converted, per se, but month name can be rendered short or long |
-- these date formats cannot be converted, per se, but month name can be rendered short or long |
||
-- month/season year - month/season year; separated by spaced endash |
-- month/season year - month/season year; separated by spaced endash |
||
['My-My'] = {'^(%D-) +(%d%d%d |
['My-My'] = {'^(%D-) +([1-9]%d%d%d?) +[%-–] +(%D-) +(([1-9]%d%d%d?)%a?)$', 'm', 'y', 'm2', 'a', 'y2'}, |
||
-- month/season range year; months separated by endash |
-- month/season range year; months separated by endash |
||
['M-My'] = {'^(%D-)[%-–](%D-) +((%d%d%d |
['M-My'] = {'^(%D-)[%-–](%D-) +(([1-9]%d%d%d?)%a?)$', 'm', 'm2', 'a', 'y'}, |
||
-- month/season year or proper-name year; quarter year when First Quarter YYYY etc. |
-- month/season year or proper-name year; quarter year when First Quarter YYYY etc. |
||
['My'] = {'^([^%d–]-) +((%d%d%d |
['My'] = {'^([^%d–]-) +(([1-9]%d%d%d?)%a?)$', 'm', 'a', 'y'}, -- this way because endash is a member of %D; %D- will match January–March 2019 when it shouldn't |
||
-- these date formats cannot be converted |
-- these date formats cannot be converted |
||
['Sy4-y2'] = {'^(%D-) +(( |
['Sy4-y2'] = {'^(%D-) +(([1-9]%d)%d%d)[%-–]((%d%d)%a?)$'}, -- special case Winter/Summer year-year (YYYY-YY); year separated with unspaced endash |
||
['Sy-y'] = {'^(%D-) +(%d%d%d |
['Sy-y'] = {'^(%D-) +([1-9]%d%d%d?)[%-–](([1-9]%d%d%d?)%a?)$'}, -- special case Winter/Summer year-year; year separated with unspaced endash |
||
['y-y'] = {'^( |
['y-y'] = {'^([1-9]%d%d%d?)[%-–](([1-9]%d%d%d?)%a?)$'}, -- year range: YYY-YYY or YYY-YYYY or YYYY–YYYY; separated by unspaced endash; 100-9999 |
||
['y4-y2'] = {'^(( |
['y4-y2'] = {'^(([1-9]%d)%d%d)[%-–]((%d%d)%a?)$'}, -- year range: YYYY–YY; separated by unspaced endash |
||
['y'] = {'^(( |
['y'] = {'^(([1-9]%d%d%d?)%a?)$'}, -- year; here accept either YYY or YYYY |
||
} |
} |
||
Line 793: | Line 804: | ||
year = year_string:match ('(%d%d%d%d?)'); |
year = year_string:match ('(%d%d%d%d?)'); |
||
if date_string:match ('%d%d%d%d%-%d%d%-%d%d |
if date_string:match ('%d%d%d%d%-%d%d%-%d%d') then --special case where both date and year are required YYYY-MM-DD and YYYYx |
||
date1 = date_string:match ('(%d%d%d%d)'); |
date1 = date_string:match ('(%d%d%d%d)'); |
||
year = year_string:match ('(%d%d%d%d)'); |
year = year_string:match ('(%d%d%d%d)'); |
||
if year ~= date1 then |
if year ~= date1 then |
||
result = 0; -- years don't match |
result = 0; -- years don't match |
||
elseif year_string:match ('%d%d%d%d%a') then |
|||
else |
|||
result = 2; -- years match; but because disambiguated, don't add to maint cat |
result = 2; -- years match; but because disambiguated, don't add to maint cat |
||
end |
end |