【发布时间】:2012-09-01 14:46:50
【问题描述】:
function validateDate( $date )
{
echo $date;
//2012-08-24 20:30:00
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1)
{
return true;
}
else
{
return false;
}
}
这总是返回 false。我使用了一个唯一的工具来构建正则表达式,它在那里工作得很好。当我将“/”添加到正则表达式时,麻烦就开始了。不知何故 PHP 似乎需要这些,但我不知道为什么,也不知道为什么它会破坏我的正则表达式。
它应该为某事返回 TRUE。像“2012-08-24 20:30:00”和“asdf2012-08-24 20:30:00asdf”的 FALSE 或任何不符合我的正则表达式的东西
提前致谢!
-----------编辑 感谢您的所有回答!
正如一些用户指出的那样,我的函数在示例日期“2012-08-24 20:30:00”中返回 true。但是,只有当我手动设置 $date='2012-08-24 20:30:00' 时才会这样做。如果我在代码中的其他地方使用完全相同的字符串调用该函数,它将返回 false。有谁知道为什么?
------------------------EDIT2
是的,很抱歉浪费了您的时间,实际上是在字符串中添加了一些空格。在调用我的函数之前在我的日期使用 trim() 现在可以得到正确的结果。
谢谢大家!
【问题讨论】:
-
这不是您验证日期的方式。它将允许
9999-99-99。虽然允许到 9999 年是一个很好的远见,但我不认为 90 年是一个真正的月份。 -
考虑使用 strtotime() 或 DateTime 类而不是那个
-
顺便说一句,
/不是必需的——只有一些匹配的表达式分隔符。您可以使用|、~,或者如果您愿意,甚至可以使用字母数字字符,只要您在末尾匹配它(并转义表达式正文中使用的相同字符的实例)。 -
该函数适用于您提供的示例日期。
-
Marc B - 也许我希望验证这些日期 Brian - 你能否详细说明我必须如何更改我的代码以使其正常工作?
标签: php preg-match