/**
* ISOフォーマット文字列の検証
* @param {*} isoString ISOフォーマット文字列
* @returns 警告判定
*/
export const isoValidator = (isoString) => {
// タイムゾーンを無視するため強制的に末尾をZに置き換える
const enforceUtcIso = isoString.replace(/[+|-]\d{1,2}:\d{1,2}$/, "Z");
// isoフォーマットが正常か判定する (例: 2023-01-01T01:02:03.444Z)
const match = enforceUtcIso.match(
/^(\d{4})-(\d{2})-(\d{2})T(0[0-9]|1[0-9]|2[0-3]):([0-5]\d):([0-5]\d)(.\d+Z|Z)$/
);
if (match == null || match.length < 8) {
// isoフォーマットに不正確な部分がある場合
return true;
}
const parsedDate = new Date(enforceUtcIso);
if (Number.isNaN(parsedDate.getTime())) {
// ISO文字列のパースに失敗した場合
return true;
}
return (
parsedDate.getUTCFullYear() !== parseInt(match[1], 10) ||
(parsedDate.getUTCMonth() + 1) !== parseInt(match[2], 10) ||
parsedDate.getUTCDate() !== parseInt(match[3], 10)
);
};