メモ。所詮メモ。
TypeScriptでなんとなく使う方法も書いておく。
◆結論
Z|[+-](0\d|1[012])(:?[012345]\d)?
▼注意
- フルのハイフン時刻表記に対してこの正規表現を通すと死ぬ。つまり、「2020-01-01」の「-01」が取れてくるわけだから、注意ですよね。
- 「-12:00」でも「-00:00」でもとれる。それが表記的に正しいかどうかはよくわからん。
- 「+09」でも「+0900」でも「Z」でも取れちゃうよ。ISO 8601がそういう仕様だからしゃあないね。
「Z」が取れちゃう問題点として、日付を表現してない文字列を処理したときに、その文字列に「Z」が混入してたらTime Zoneだと勘違いして引っ掛けちゃう可能性あるよね。
◆おまけ:読み方
「|」が “または”。
「[]」が “~のうちのひとつ”
「()」が 算数のカッコと同じようなもの。(もっと言うとキャプチャ)
「\d」が数値。(0~9)
「?」が “直前の文字が0回あるいは1回”
→「(hoge)?」だと、「文字列hogeが0回あるいは1回」
◆おまけ:TypeScriptでつかう
割と適当な処理だから、割と適当な文字列を処理したい場合は割と適当厳密にやれや。
- 前後の空白をTrimして
- 日付の表示部分を一応消して
- 「Z」の判定を正規表現の外に出してます。
private getOffset(dateTime: string): string { const d = dateTime.trim().replace(/\d{4}-\d{2}-\d{2}|\d{4}\/\d{2}\/\d{2}/, ''); if (d.endsWith('Z')) return 'Z'; return /[+-](0\d|1[012])(:?[012345]\d)?/.exec(d)?.[0] ?? ''; }
◆結論
なんかもう体質的に出社しないと仕事できない。リモートマヂ無理。。。OneShotしょ。。。
コメントを残す