解决方案:
我将American_date gem用于 ruby 端,并使用此正则表达式进行 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,如果日期是正确的,则验证器没有通过。
我需要一个优雅的解决方案。