【问题标题】:PHP don't allow format d/m/Y in String datePHP 不允许在字符串日期中使用 d/m/Y 格式
【发布时间】:2012-05-12 23:21:35
【问题描述】:

我想验证一个应该保存为日期的字符串。我希望用户以format ('d-m-Y) 的形式给出日期。 我正在使用这个函数来检查是否给出了一个有效的日期:

function isDateValid($birthdate)
{
  $date = date('Y-m-d', $birthdate);        

  $stamp = strtotime(str_replace('/', '-', $date), $date);

  if (!is_numeric($stamp))
     return FALSE;

  //checkdate(month, day, year)
  if ( checkdate(date('n', $stamp), date('d', $stamp), date('Y', $stamp)) )
  {
     return TRUE;
  }
  return FALSE;
} 

这适用于这种格式 d-m-y 的每个条目。但是当给定这样的格式 d/m/Y 时,它仍然返回 true 但日期会像这样 m/d/Y 保存在数据库中。

我可以做些什么来确保这种格式 'd/m/y' 的条目无法保存在数据库中。

提前致谢

找到解决方案

好的,我想我找到了解决方案

if(!preg_match('/^(\d\d?)-(\d\d?)-(\d\d\d\d)$/', $birthdate, $matches))
{
  return false;
}
return checkdate($matches[2], $matches[1], $matches[3]);

我检查是否给出了正确的模式,然后我检查它是否是一个有效的日期。 这对我来说很好,谢谢!!

【问题讨论】:

  • 永远不要让用户将日期作为文本插入,因为他们可能会插入你永远想不到的字符串。使用一些日期选择器
  • 如果月份和日期的值都
  • 不要在数据库中使用字符串来存储日期,使用适当的日期格式,那么输入日期的格式无关紧要。或者只需检查有效年份是否
  • @k102 即使使用日期选择器,您也不能依赖用户输入的格式有效。如果有人操纵了输入数据,您仍然需要验证日期。
  • @SarahPantry,当然。我只是想提供一个小建议,而不是一个完整的解决方案 =)

标签: php string date


【解决方案1】:

您可以使用如下正则表达式模式:*\d{4}-\d{2}-\d{2}* 来检查格式

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 2021-03-09
    • 1970-01-01
    • 2021-12-22
    • 2018-05-25
    • 1970-01-01
    • 2019-10-09
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多