if(preg_match('/^[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4}$/', '10-30-2013')){
echo 'true';
}
else {
echo 'false';
}
这不给我真实的。我想我错了regex
。请告诉如何纠正这个regex
我建议不要为此使用正则表达式——使用正则表达式进行日期验证是一件非常困难的事情,因为任何给定月份的天数都可能发生变化。
简单地使用 PHP 的DateTime
类将其实际解析为日期对象要好得多。这也将验证它;如果不符合指定格式,则不会解析。
$dateObj = DateTime::CreateFromFormat('m-d-Y',$inputString);
请参阅 PHP 手册页以获取CreateFromFormat()
.
您应该使用专用函数来解析日期,即:
if (strptime ('10-30-2013' , 'm-d-Y') !== false) {
echo 'true'.PHP_EOL;
} else {
echo 'true'.PHP_EOL;
}
实际上,正如其他人所证实的那样,您的正则表达式可以正常工作并返回true
。
但是当你缩小你的代码时,我认为你试图向我们展示的输入字符串不仅仅是adate
并且它在一个字符串中或者可能有尾随空格!
因此,在您的正则表达式中使用^
and$
将导致失败。