-3
 if(preg_match('/^[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4}$/', '10-30-2013')){
   echo 'true';
}
else {
   echo 'false';
}

这不给我真实的。我想我错了regex。请告诉如何纠正这个regex

4

3 回答 3

2

我建议不要为此使用正则表达式——使用正则表达式进行日期验证是一件非常困难的事情,因为任何给定月份的天数都可能发生变化。

简单地使用 PHP 的DateTime类将其实际解析为日期对象要好得多。这也将验证它;如果不符合指定格式,则不会解析。

$dateObj = DateTime::CreateFromFormat('m-d-Y',$inputString);

请参阅 PHP 手册页以获取CreateFromFormat().

于 2013-10-22T11:09:05.120 回答
1

您应该使用专用函数来解析日期,即:

if (strptime ('10-30-2013'  , 'm-d-Y') !== false) {
  echo 'true'.PHP_EOL;
} else {
  echo 'true'.PHP_EOL;
}
于 2013-10-22T11:14:26.987 回答
0

实际上,正如其他人所证实的那样,您的正则表达式可以正常工作并返回true

但是当你缩小你的代码时,我认为你试图向我们展示的输入字符串不仅仅是adate并且它在一个字符串中或者可能有尾随空格!

因此,在您的正则表达式中使用^and$将导致失败。

于 2013-10-22T11:18:35.577 回答