解決:
ruby エンドにはamerican_date ジェムを使用し、js 検証にはこの正規表現を使用しました。
/^(?=\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\x20|$))|(?:2[0-8]|1\d|0?[1-9]))([-./])(?:1[012]|0?[1-9])\1(?:1[6-9]|[2-9]\d)?\d\d(?:(?=\x20\d)\x20|$))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\x20[AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/.test(value)
質問
日付フィールドでjquery datepickerを使用していますが、ユーザーは日付を入力できます。
アプリケーションのユーザーが独自の日付形式を選択できるようにしたいと考えています。米国形式の mm/dd/yy またはヨーロッパ形式の dd.mm.yy を選択できます。
JavaScript 形式のバリデーターを使用しています。このような
!/Invalid|NaN/.test(new Date(value).toString());
(正規表現を使用しないというアイデアが本当に好きです)
残念なことに、Ruby と JavaScript がこれを困難にしています。
irb:
2.0.0p247 :018 > Date.parse("11/02/2013")
=> Mon, 11 Feb 2013
javascript コンソール
new Date("11/02/2013")
Sat Nov 02 2013 00:00:00 GMT+0100 (CET)
irb:
2.0.0p247 :029 > Date.parse("11.02.2013")
=> Mon, 11 Feb 2013
javascript コンソール
new Date("11.02.2013")
Sat Nov 02 2013 00:00:00 GMT+0100 (CET)
検証に合格すると、データベースの日付フィールドに nil が返されます。日付が正しい場合、バリデータは合格しません。
エレガントなソリューションが必要です。