私の友人の一人がインタビューをしました、そしてこれは尋ねられた質問です、
Webアプリケーションは、任意のパターンの日付を受け入れる必要があります。
つまり、mm-dd-yy / dd-mm-yyyy / dd-mm-yy、Jan-dd-yyyy..考えられる任意の日付パターンである可能性があります。
ユーザーが入力すると、文字ごとに検証する関数が必要です。
これをどのように処理しますか?
私の友人の一人がインタビューをしました、そしてこれは尋ねられた質問です、
Webアプリケーションは、任意のパターンの日付を受け入れる必要があります。
つまり、mm-dd-yy / dd-mm-yyyy / dd-mm-yy、Jan-dd-yyyy..考えられる任意の日付パターンである可能性があります。
ユーザーが入力すると、文字ごとに検証する関数が必要です。
これをどのように処理しますか?
誤解しているかもしれませんが、検証に関する質問の場合は、日付のデコードではなく、日付が無効でないことを確認するだけです。つまり、29-02-2011や02-29-11などと入力できないようにします。
私がすることは、最初に日付を部分に分割する関数を書くことです。質問を考えると、日付は数値形式であるため、区切り文字が必要であると言えます。可能な区切り文字として(。-/)を使用しましょう。メモリに3つの異なる数値があるように、区切り文字を使用して日付を3つの部分にカットします。
さて、ロジックについてです。最初の値は任意(d、m、y)にすることができます。2番目の値は実際には1年になることはないため、(d、m)のみになります。3番目の値は実際には1か月になることはないため、(d、y)のみになります。それを念頭に置いて、私は次の線に沿って何かをします:
範囲がないので、年を見つけてみてください。x>31である任意の値xは年でなければなりません。
その日を見つけてみてください。年ではなく、12を超える値はすべて日である必要があります。
これらの値を取得したら、月が12未満であることを確認するためのクイックチェックを実行します。そうでない場合、日付は無効です。
...しかし、あいまいさはどうですか..?
01-01-01のようにあいまいな場合は、上記のロジックを使用して、各値が何であるかを理解する必要があります。各日付セグメントの値を指定して、各可能性をテストする関数を作成する必要があります。日付を検証しようとしている場合、少なくとも1つのテストに合格すれば、日付を有効としてマークすると思います。基本的には、特定の年の特定の月(うるう年を忘れないでください)、その日がどの範囲に入る可能性があるかを示す関数を記述し、特定の日付の考えられる各ケースをループします。
問題が実際に日付を解読することであった場合、すでに説明したように、フォーマット制限を課さずに100%正確に解読することは不可能です。他の唯一のオプションは、フィールドの値が変更されたときにJSイベントをフックして起動し、フィールドの更新の横にテキストを表示して、ユーザーが入力したとソフトウェアが判断した日を長い形式(2012年1月1日)で表示することです。必要に応じて、その日付をクリック可能にして、ユーザーがさまざまな形式を切り替えることができるようにすることもできます。しかし、結局、これがあなたが求めていたものである場合、あなたはあなたがやりたいことを達成するための具体的な方法を得るつもりはありません。