web-dev-qa-db-ja.com

日付の検証で「091011」を許可する必要がありますか?

ユーザーに日付のMMDDYYまたはMMDDYYYY形式の入力を許可する必要がありますか?

つまり、ユーザーが分離記号(.-または/)?

24
Chris Dwyer

「依存する」という通常の注意事項が当てはまります。ユーザーがどこかから読み取っている日付を入力していて、その参照資料がMMDDYYまたはMMDDYYYYとしてフォーマットされている場合は、はい、単に文字起こしさせてください。

また、ユーザーがデータ入力プロセスの作業者(コールセンターなど)であり、カジュアルなWebサイトの訪問者ではない場合、キーストロークの効率的な方法でデータ入力を実行できます。

12
Erics

日付があいまいなときは、それをあなたが思っているものに変換すべきではありません。

たとえば、世界のほとんどの日付形式はDDMMYYYYまたはYYYYMMDDですが、米国は何らかの(愚かな)理由でMMDDYYYYを使用しています。これは混乱の原因となる可能性があるので、あいまいな日付は変換しないでくださいです。

日付が重要な場合は、数値ではなく日付ピッカーの使用を検討してください。

これを処理する別の方法は、日付を変換する入力したら単語にすることです。 2011年10月9日のように。2011年9月10日を意味する場合は、変更に気づく可能性が高くなります。

52
JohnGB

上記の良い答え。ただし、ヒントはあと1つです。

フィールドがフォーカスを失った瞬間に、アプリケーションで日付を解析して書き直すことを検討してください。ユーザーが091011と入力した場合は、「2011年10月9日」(または米国のユーザーの場合は「2011年9月10日」)に変換します。ユーザーは、エントリが誤って解釈されていないかどうかをすぐに確認できます。

17

アメリカのMM/DD/YYYY対スモールエンディアンDD/MM/YYYY対ISO YYYY-MM-DDのため、日付の検証は常に問題でした。セパレーターなしで生の数値をユーザーに入力させたり、期待したりすることはできません。うまくいきます。私の主観的な経験では、この例のように Quince の日付フィールドで数値のみを入力できる場合を除いて、誰がこの形式で日付を入力するのか誰にもわからないとも言わなければなりません。セパレータはすでにそこにあるので:

enter image description here

この種のフィールドの優れたトリックは、数値の1つが入力されると、フィールドを次のフィールドにスキップできるため、121212と入力すると、12/12/2012として自動的に表示(および入力)され、スラッシュがフィールドの一部のように見えるようにスタイルを設定して、視覚的に見苦しくないようにすることができます。ユーザーに生の数値を入力させたい場合は、これが唯一の方法です。 :実際にそれらを別々のフィールドにすることは非常に不親切です、私はそれを示唆していませんでした。カーソルは、左右の矢印キーを押すだけで、日/月/年の間を移動できるはずです。これは単一の「フィールド」である必要があり、カーソルは単に/区切り文字をスキップします。

他の日付入力方法も検討することをお勧めします。最善の方法はすべて、ユーザーが有効な日付を入力していると想定するのではなく、無効な日付を入力する手助けをします(ユーザーが常に正しいデータを一度に入力した場合、検証は必要ありませんが、今はどうでしょうか?) Live UX には、多くのオプションの概要があります。おそらく、次の点に注意してください。

キャプチャされるデータが複数の形式で存在する可能性がある場合、ベストプラクティスは、ユーザーが希望する形式でデータを入力できる柔軟な入力フィールドを提供することです。その後、スクリプトを使用して、エントリを検証し、システム内で必要な適切な形式に変換できます。

121212を日付として入力する場合はmust変換して2012年12月12日(または、地域/ユーザー向けの標準の区切り文字)を指定し、(MM/DD/YY)フィールドのどこかに。 Quince には ピッキング日付 に関する優れた記事もいくつかあります。あいまいさを取り除く理想的な方法は日付ピッカーです。 enter image description here

しかし、これらは視覚的に混乱する可能性があり、ユーザーが入力している正確な日付をユーザーが知っている場合(if!)に日付を入力するよりもはるかに遅くなります。両方の問題を解決するには、日付のプレーンテキスト入力フィールドに少し enter image description here アイコンをクリックして、カレンダーから日付を選択することもできます。

12
Ben Brocka

問題は、日付がユーザーにとって曖昧ではないことです-彼らは常に彼らが何を意味するかを知っています。

  • ユーザーが091011を入力
  • システムは09/10/11を表示します
  • ユーザーは、コンピューターが正しく理解していると想定します

単に091011を受け入れてそのままにしても、ユーザーは解釈に違いがあるかどうかを確認できないため、これを解決できません。

主な原則

受け入れるものについては自由に、提供するものについては正確に。

(別名 The Robustness Principle -参考までに、以下のPatrick McElhaneyに感謝します。)

ユーザーが091011を入力することは必ず受け入れてください。ただし、誤解がないように、明確な形式に変換して表示してください。

  • ユーザーが091011を入力
  • システムは2011年10月9日を表示します
  • ユーザーはコンピューターが正しく理解されていることを知っています。

または

  • ユーザーが091011を入力
  • システムは2011年9月10日を表示します
  • ユーザーは、コンピューターがフィールドを理解していないことを認識して修正します。
12
Bevan

日付があいまいでなければ、許可する必要があります。予想される形式がMM/DD/YYYYであり、それらが091011と入力する場合は、テキストボックスにフォーカスを失ったときに自動修正することを検討してください。したがって、2011年9月10日になります。

もちろん、ここで重要なことは、予想される形式を示す必要があるということです。私は何千ものオンライン保険申請を見たサイトを担当しており、MM/DD/YYYY形式を次のように使用しました...
enter image description here

ただし、MM/DD/YYYYが事実上の標準である米国を拠点とする企業にのみサービスを提供しました。サイトがよりグローバルなオーディエンスに到達する場合は、別のアプローチ、または日付の選択を検討することをお勧めします。

7
Steve Wortham

YYYYMMDDは、他の一般的な標準であるMM/DD/YYYYまたはDD/MM/YYYYと混同されないため、常にISO形式を許可できます。これにより、月のフィールドに(無効な)20が配置されます。

ただし、8桁の非ISOと6桁の何かはあいまいになる可能性があるため(少なくとも2032年まで)、それだけに依存するのは不十分です。確認を求めたり、月のテキスト説明を許可したり(たとえば、サフィックスツリーで検索すると、jun jul s se sept septはすべて有効で明確な月を返します)、グラフィカルポップアップを使用して、どれを選択するかを選択できます。彼らが使用している日付形式(いくつかのエラーが悲惨でない場合は、それを明記または事前に選択することで十分ですが、ユーザーに選択を強制するとエラー率は低くなります)。または、日付が正しいことを確認してもらいます。

MM/DD/YYにはMMDDYYとまったく同じくらいのあいまいさがあり、他の2つからYYYY/MM/DDを区別できるため、セパレータを使用しても効果はありません。

個人的には、常にISO形式を選択してきましたが、その場合、ユーザーは技術的にかなり精通しています。技術者以外のユーザーが最大限の信頼性を求めている場合は、カレンダーで日付をクリックするという防弾性能に勝るものはありません。 (タイプミスは、タッチタイピストではない人にとって間違いがちです。なぜなら、彼らがミスを犯していないことを確認するために、タイプしたものを振り返らないことが多いからです。)

6
Rex Kerr

日付区切り記号「/」がグレー表示された定型入力として表示される1つのフィールドを使用するのが最適です。

mockup with no data entry

download bmml sourceBalsamiq Mockups で作成されたワイヤーフレーム

ユーザーがセパレータなしで日付を入力すると、数値はセパレータの周りにフォーマットされます。このようにして、ユーザーに追加のタブキーを押したり、自動タブで入力の流れを妨げたりすることなく、正しい日付表示をサポートします。

user has typed "11"

bmmlソースをダウンロード

'/'区切り文字の入力に慣れているユーザーの場合、区切り文字を入力すると、それに応じてエントリがフォーマットされます。これは、1桁の日と月しか含まない日付をより速く入力するのに役立ちます(たとえば、3ストロークで1/1、5では01/01)。

最後に、マスクをさらに変更して、ユーザーが各桁を入力すると消える日/月の順序を表示できます。

4
Darren

Alan Cooper は、日付を解析する必要があると主張します。それはユーザーエクスペリエンスの問題です。

  • 誕生日ですか?次に、日付が何であるかは明らかです:2009年10月11日
  • Webサーファーのクレジットカードの有効期限ですか? 2011年9月10日

人間がコンテキストから日付を推測できる場合、コンピュータは同じことを行う必要があります。プログラミングは難しいので、ユーザーエクスペリエンスを犠牲にする必要はありません。

たとえ日付であっても、人間が決定するほどあいまいです:誰も気にしない-とにかくそれを保存してください。それが重要な場合、ユーザーは後で修正できます。

確かに、ユーザーにヒント "うーん、申し訳ありませんが、それがどの日付であるかわかりません"。 userは次に何をするかを決定できます。 userが気にしない場合-気にしないでください。ユーザーが気になれば、それを「ダム」コンピュータが理解できる形式に変更できます。

ただし、 "idiocy" で手続きを停止しないでください。


FromAbout Faceby Alan Cooper、398ページ

データが制限されているが制限されていない場合、プログラムはユーザーにデータの入力を許可し、後で拒否する必要があります。緩和策はいくつかありますが、実際にはこの問題を解決する良い方法はありません。でなければ...

この問題を解決する1つの方法はisです。プログラムは先に進み、ユーザーが入力したものをすべて受け入れる必要があります。つまり、半制限データを排除します。制限付きギズモを使用して正しいデータを強制するか、制限なしギズモでユーザーから提供されたものをすべて受け入れます。 Moustプログラマーはこのソリューションを拒否します。彼らは、彼らのプログラムが社会保障番号フィールドへの入力として、例えば「asdf; lkj」を受け入れることができるとは感じていません。

...

物事の動作が異なるように見えるという公理に基づく根本的な改善点は、検証ギズモと未検証ギズモを視覚的に区別することです。ギズモの境界線には別の色と線のスタイルを使用することをお勧めします。黒一色ではなく青の破線は、何かが起きたことをユーザーに警告します。

検証ギズモの主なツールは、ユーザーに豊富なステータスフィードバックを提供することです。残念ながら、今日私たちが知っている編集ギズモは、いかなる種類のフィードバックに対しても組み込みサポートを事実上提供していません。設計者は、このようなフィードバックメカニズムを詳細に指定する必要があります。指定しないと、提供されません。

3
Ian Boyd

私は仕事の前にこの種のものに出くわしました。たとえば、ユーザーがテキストボックスに日付を入力できるようにしてから、入力したものを日付に変換する場合は、日付ピッカーを提供するか、日付を別々のフィールドに分割することをお勧めします。日、月、年(M/R/18レーティングの映画やゲームのサイトでのさまざまな生年月日のチェックを参照)。

日付ピッカーを提供できないか、日付を分割できない場合(たとえば、要件のため)、ユーザーに日付に関するフィードバックを提供する必要があります。期待する形式(DDMMYYとMMDDYY)を通知するか、ボックスがフォーカスを失ったときに、入力したデータを別の日付形式(YYYY-MM-DDなど)に自動的に変換します。 (または両方!)

たとえば、MMDDYYを期待するラベルに指定します。このようにして、ユーザーが130103(2003年1月13日の潜在的な英国標準日付)を入力した場合、13か月目がないため、予期している米国標準を使用して変換できないことをすぐに知らせます。ただし、これはユーザーが010203と入力した場合は役に立ちません。2003年2月1日、英国の標準として扱われることを期待していますが、実際には2003年1月2日、米国の標準として扱われるため、変換する必要があります。彼らがそれをチェックできるように飛ぶ...可能であれば、日付ピッカーを使用する方が良いです!

私が取り組んだアプリケーションの1つで、英国で使用するように設計されており、ユーザーは010203を入力することができました。フィールドからタブで移動するとすぐに、ユーザーが入力した値は01/02/2003に変換されました。ただし、ユーザーが2003年2月1日(米国標準)を意味するために010203と入力した場合、これはもちろん無効な日付であり、ユーザーが気付かなかった可能性があります。私たちはすぐに日付ピッカーを採用しましたが、古いユーザーにはレガシー動作が残っていました。

3
oliver-clare

彼らがそれを間違って行うことができないことを確認してください

ユーザーの意図を推測しようとしないでください。入力している内容を正確に把握してください。

あなたはできる:

  • 日付ピッカーを使用する
  • 年、月、日の一連の選択ボックスを使用(JSは不要)

はい、どちらもテキストの入力よりも時間がかかりますが、正しく入力されますです。

選択の痛みを和らげる

選択は強引に見えるかもしれませんが、以下を考慮してください。

  • 経験豊富なユーザーは、フィールド間を移動する方法を学ぶことができます。多くのブラウザでは、月のリストを含む選択入力に焦点を合わせて「Nov」と入力すると、11月が選択されます。この方法で使用すると、selectは自由形式の入力と同じくらい高速であり、「11月」は「11」とは異なり、完全に明確です。
  • あなたは賢明なデフォルトで痛みを和らげることができるかもしれません。明らかに、ユーザーが誕生日を入力している場合は、それを推測することはできませんが、選択ボックスを使用して注文の発送日を選択していることを想像してください。その場合、デフォルトで最も早い日を選択できます。ほとんどのユーザーは、多くても1つのドロップダウンを変更します。

あいまいな入力をしないでください。あなたが間違っていると思ったら、それはあなたのせいです。 心を読むことはできません-しないでください。

3
Nathan Long

国/ロケールの設定、または作業環境での慣れに従って、ユーザーが希望する形式で日付を入力できるようにします。 Javaは、日付を解析して、たとえば、正しいストレージおよび処理要件を確認できます。

日付を特定の方法でstoredする必要がある場合、日付マスクまたはコンバーターを使用して、入力された日付を必要な形式に変換できます。 http://jdevadf.Oracle.com/adf-richclient-demo/docs/tagdoc/af_convertDateTime.html 。 Javaでは、日付があいまいな場合でも、日付入力に一連の便利なパターンを定義することもできますが、問題が発生する可能性があり、UXが使用のグローバルコンテキスト。

ヘッドダウンワーカー、10キーキーボードユーザー、またはCRUDデータワーカーが日付ピッカーではなく入力して直接フィールドに日付を入力し、データベースに送信されたエラーを処理できるようにすると、ユーザーに確認を求めるエラーを投げるのではなく、生産性が向上します。ページ全体を送信したら修正します。

HTML5は、フォーマットを事前にユーザーに伝えるための素晴らしいアフォーダンスを提供します: http://slides.html5rocks.com/#new-form-types

0
uobroin