我的一位朋友接受了采访,这是被问到的问题,
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 等等。
我要做的是编写一个函数,首先将日期分成几部分。鉴于这个问题,我们可以说日期将采用数字形式,因此需要一个分隔符。让我们使用 (. - /) 作为可能的分隔符。使用分隔符将日期分成三部分,以便在内存中拥有三个不同的数值。
现在讲逻辑。第一个值可以是任何值(d,m,y)。第二个值永远不会是一年,所以它只能是 (d, m)。第三个值永远不会是一个月,所以它只能是 (d, y)。牢记这一点,我会按照以下方式做一些事情:
尝试查找年份,因为它没有范围。x > 31 的任何值 x 都必须是年份。
试着找到那一天。任何不是年份且大于 12 的值都必须是日期。
获得这些值后,请快速检查以确保月份 <= 12。如果不是,则日期无效。
...但是模棱两可呢..?
在模棱两可的情况下,例如 01-01-01,您将必须使用上述逻辑找出每个值可能是什么。给定每个日期段的值,您需要编写一个函数来测试每种可能性。我想如果您尝试验证日期,如果日期通过至少一项测试,您会将其标记为有效。基本上,您只需编写一个函数,说明给定年份中的给定月份(不要忘记闰年),这一天可以落入什么范围,然后循环遍历给定日期的每个可能情况。
如果问题是要真正破译日期,那么正如已经解释的那样,在不施加格式限制的情况下不可能 100% 准确地做到这一点。您唯一的其他选择是挂钩 JS 事件以在字段值更改时触发,并在字段更新旁边以长格式(2012 年 1 月 1 日)显示软件认为用户输入的日期。您如果您愿意,甚至可以使该日期可点击,以允许用户循环使用不同的格式。最后,如果这是您所要求的,那么您将不会获得实现您想做的事情的具体方法。