В регулярном выражении ниже я проверяю, что день 01-31, месяц 01-12 и год 1900-2099. Если это так, замена произойдет и приведет к гггг-мм-дд.
function change(input) {
return input.replace(/^((?:0[1-9]|[12]\d|3[01]))-((?:0[1-9]|1[012]))-((?:19\d\d|20\d\d))$/,"$3-$2-$1");
}
function check(input) {
// If you want to accept year 0000-9999, replace "(?:19\d\d|20\d\d)" with "\d{4}"
return /^(?:0[1-9]|[12]\d|3[01])-(?:0[1-9]|1[012])-(?:19\d\d|20\d\d)$/.test(input)
}
console.log(change("01-10-1922"));
console.log("01-10-2011",check("01-10-2011")); // true
console.log("2011-10-01",check("2011-10-01")); // false
console.log("01-21-2011",check("01-21-2011")); // false
Дата не будет подтверждена. Например, он с радостью примет 31 февраля, 31 апреля и т. Д., Но не будет пытаться конвертировать 32 февраля, 00 января или месяц 13 ...