【问题标题】:User input, verify if it is correct date format用户输入,验证日期格式是否正确
【发布时间】:2011-11-07 06:02:37
【问题描述】:

我有一个用户输入信息的表单。我希望能够检查他们在我的日期文本字段中输入的日期是否采用正确的 mm/dd/yy 格式。

如何根据 mm/dd/yy 格式检查用户输入的内容,如果不正确,显示错误,告诉他们输入的日期必须为 mm/dd/yy 格式。

谢谢

【问题讨论】:

  • 可以在客户端使用<input pattern="^\d\d/\d\d/\d\d$"> 和/或在PHP 中验证格式。并断言它也是一个有效的日期,使用strtotime() 并探测它是否成功。

标签: php date textbox


【解决方案1】:

最好使用date picker 或三个<select>s,以确保您的用户别无选择,只能输入正确的日期格式。

【讨论】:

  • 或者只是 <input type=date> 让浏览器或 JS shim 处理 tedios 部分。
【解决方案2】:

我确信还有其他方法可以做到这一点,但使用explode(),通过使用“/”作为拆分字符将传入数据分成[希望]三个条目的数组。

然后检查第一个值是否在 1..12 范围内,第二个值是否在 1..31 范围内,最后一个值是否在 0..99 范围内。

更复杂的检查将确保每个月不超过适当的天数(对于额外的信用,当且仅当年份可以被 4 整除时才允许在第 02 个月允许 29 天(是的,这搞砸了前两位数字不能被 4 整除的所有世纪,但年份格式仅限于 yy))。

如果输入太短(我会说 5 个字符以允许 1/1/1)或太长(超过 8 个字符),则无效。

更好的格式是需要分隔符,只需确保字符串长度为 6 个字符,全部为数字,并且每对数字都在您可接受的范围内。

【讨论】:

  • just make sure the string is 6 characters long - 你的意思是 8 个字符吗?记住所谓的千年所谓的bug……
  • @DaveRandom - OP 特别 表示日期格式为 mm/dd/yy - 年份只有两位数 :)
  • 很公平,如果世界末日而我们都死了,我想这不是你的错... :-D
【解决方案3】:
$date='12/12/2011';
$reg="#^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$#";

if (preg_match($reg, $date)) {
    echo "GOOD date.";
} else {
   echo "BAD date.";
}

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 2019-12-05
    • 2011-01-27
    • 1970-01-01
    • 2013-09-15
    • 2021-01-13
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多