23
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

え!<input type="date">で作った入力フォームの年には6桁入力できるんですか!?

Last updated at Posted at 2024-01-15

こんにちは!withサーバーチームの@10keiと申します。

簡単な入力フォームを作成する際、日付の入力項目には<input type="date">を使うと便利ですよねー。

See the Pen Untitled by KeitoSato (@Keito13) on CodePen.

入力補助のカレンダーもブラウザが用意してくれます。おてがる!😄

ところでこのフォームですが、入力補助のカレンダーを使わずとも、キーボードから直接入力することができます。
生年月日など、現在の日時から離れた年の入力をしたい時は、直接入力した方が早い時もありますね。

さて、では弊社アプリの誕生日(iOS版のリリース日)を試しに入力してみましょうか。
えーと、2016年3⽉29⽇だから、「20160329」っと…

chrome-capture-2023-11-22.gif

ん?

あぇ!?

201603年!!!??

年の最大値は9999年じゃない!?

<input type="date">で作成した日付の入力フォームにおいて
年の最大値は9999年ではありません。
なんと、275760年まで入力することが可能です。

JavaScriptなどのDate型と同様に
1970年1月1日から、100,000,000日後までをサポートしているからです。

これはtype="date"に限らず
type="datetime-local"type="month"も同様の入力範囲となっています。

ですが、2000年代に生きる我々にとって、年月日の入力は通常8桁で完結するものであり
4桁入力した時点で年の入力を終え、月の入力に自ずと移ってくれると思うのが自然です。

年に6桁の入力ができてしまうと
ユーザーの入力ミスを誘ってしまうUIだと言えるでしょう。

RDBMSのDATE型サポート範囲にも注意!

さらに厄介なことに、RDBMSによってはDATE型のサポート範囲が9999-12-31までとなっています。

ユーザーに入力させた日付フォームの値をそのまま保存するシステムだった場合、使用しているRDBMSによっては

年に6桁の入力ができてしまうことで、入力ミスの誘発だけでなく
エラーまで発生させてしまう要因となり得ます。

max属性で入力の最大値を設定してあげよう

日付の入力を受け取る際、サーバー側で値のバリデーションを確実に行い、予期せぬエラーを防ぐ様にしましょう!
また、そもそも年に入力できる値の範囲を制限し、入力ミスを防いであげれば、よりユーザーフレンドリーなフォームになりますね。

こんな時はmax属性を付与してあげると良いでしょう!

サービスによって、入力が想定される最大の日付をmaxに設定するのが理想ですが
特に思い当たる日付がなければ、9999-12-31をとりあえず最大値にしてあげれば
年に5桁以上の桁数が入力されることは防ぐことができます。1

ちなみに、pattern属性はdateなどの型においては無効になりますので
こちらではユーザーの入力制御を行うことはできません。注意!2

See the Pen Untitled by KeitoSato (@Keito13) on CodePen.

<input type="date">を使って日付の入力項目を作成する際は、最大値を忘れずに設定しましょう!

参考

  1. Chromeではキーボード入力でも、max属性で設定した日付までの入力に制限してくれますが、Firefox, Safariでは275760-12-31まで入力が出来てしまいます(ただし、maxに設定した日付を超えた入力がされていると:invalidにはなってくれる)

  2. 現在ではあまり意識する必要はないと思いますが、date型のinput要素に対応していないブラウザの対応のために、pattern属性をつけることもあったようです。(ブラウザーの互換性の扱い - MDN)

23
15
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?