正则表达式的日期不适用于PHP

时间:2011-03-17 23:16:55

标签: php javascript regex

这个使用javascript工作的正则表达式在添加分隔符后在php中不起作用,抛出一个很好的错误:

$regex = '/(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)/';

这个都没有,它甚至会出现编译错误!

$regex = '/^(0?[1-9]|[12][0-9]|3[01])[\/\.- ](0?[1-9]|1[0-2])[\/\.- ](19|20)\d{2}$/';

您使用哪种正则表达式以gg / mm / aaaa格式验证日期?

3 个答案:

答案 0 :(得分:2)

试试这个:(在regexp中将/转义为\/。我也更改了数字匹配的顺序。)

$regex = "/^(3[01]|[12][0-9]|0?[1-9])\/(1[012]|0?[1-9])\/((19|20)\d{2})$/";

对于您使用[\/\.- ]的第二个正则表达式,这是错误的,因为[\.- ]表示从.'的'来解决此问题-应该是[]之间的第一个或最后一个字符。

答案 1 :(得分:1)

如果这是为了验证,为什么不是这样的?:

$date = date_parse_from_format('d/m/Y', '08/08/2000');

if ($date['warning_count'] || $date['error_count']) {
   // invalid date
}

这显然不是正则表达式,但管理起来似乎更简单。

我不确定是什么触发警告以及触发错误的原因,但是一些简单的测试应该能满足任何好奇心。

答案 2 :(得分:0)

我认为你的问题是你试图逃避字符串中的错误斜线,这只是让你认为你想要匹配反斜杠然后它会被你的正则表达式中的斜线搞糊涂了。试试这个:

"/(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/((19|20)\d\d)/"