angularjs $valid on dates 在 firefox 中报告不正确

angularjs $valid on dates reports incorrectly in firefox

我注意到 firefox 中日期表单验证的问题,非常感谢任何建议或可用的解决方法。

日期验证问题

我正在使用 angularjs v1.3.11,我遇到的问题实际上是 bootstrap 日期选择器,但是对于标准输入类型来说也是同样的问题="date"字段。

如果我输入无效的闰日,例如29/02/2013(en-GB 日期 - DD/MM/YYYY)使用 bootstrap 日期选择器或输入类型="date" 字段 $ valid on that form field reports as invalid on ALL browser accept for firefox.我真的希望它在每个浏览器上都报告为无效!

它似乎使日期无效,例如,如果我将完整的垃圾放入字段中,例如输入没有月份的日期,那么 29/2013 将非常正确地报告为无效在我测试过的所有浏览器中。这几乎就像 angular 是 运行ning 一个特殊的 firefox 正则表达式,它不关心日期的有效性,除了它有 3 组数字。

在 angular 网站上查看此日期问题

如果您 select 以下 link https://code.angularjs.org/1.3.11/docs/api/ng/input/input%5Bdate%5D 您将被带到 angular 自己写的输入 [日期]。

按照 firefox 中的 link - 滚动到页面底部到他们放在屏幕上的示例并输入无效日期,例如2013 年 2 月 29 日(此站点似乎需要 Firefox 的 ISO 日期格式)并且您会看到它报告您输入的日期为 valid,即使没有 2 月 29 日2013 年不是闰年。

例如,如果您在 chrome 中执行相同的测试,那么您将看到它将日期报告为 INVALID - 这就是我希望发生的事情。

如何解决? 如果您已经阅读到这里,谢谢!我意识到这可能是特定浏览器如何处理日期的问题,尽管我已经广泛搜索并且在 firefox 或 angular.

中没有发现任何列出的错误。

我在这里真正希望的是,有人可能知道一个解决方法,例如拦截确定输入字段 $valid 的调用的方法,这样我就可以 运行 我的自己的正则表达式或类似的东西。如果有人知道为什么这在 Firefox 中如此奇怪,我也很想知道!

提前感谢任何人可以提供的帮助:)

林赛

您需要更复杂的日期逻辑来确定日期是否有效。我建议使用 moment.js 或 date.js 等第三方库来执行日期验证逻辑。

尝试以下 SO 问题的已接受答案底部的演示 link:

Simple angularjs date input

输入2013-02-29,会正确识别日期无效

已在 Firefox、IE 和 Chrome 上测试。