【问题标题】:Regex for date not working in php日期的正则表达式在php中不起作用
【发布时间】:2011-03-18 15:33:05
【问题描述】:

一旦添加了分隔符,这个在 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 格式的日期?

【问题讨论】:

    标签: php javascript regex


    【解决方案1】:

    试试这个:(在正则表达式中将/ 转义为\/。我还更改了数字匹配的顺序。)

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

    对于您使用[\/\.- ] 的第二个正则表达式,这是错误的,因为[\.- ] 意味着'从.'</em> 来修复这个- 应该是第一个或[] 之间的最后一个字符。

    【讨论】:

    • 非常接近!!!当天的验证效果不佳:例如 1998 年 11 月 34 日是真实的。
    • 在 34/11/1998 内找到匹配 4/11/1998 并返回 true。添加 ^$ 以匹配输入的开始和结束将解决此问题。
    • 或者当你的正则表达式中出现斜线时使用不同的正则表达式分隔符:$regex = "#^(3[01]|[12][0-9]|0?[1-9])/(1[012]|0?[1-9])/((19|20)\d{2})$#";
    • @hysoka:另外,请记住,这个正则表达式仍然会传递很多无效日期(31/02/2011 等)。您可以使用正则表达式进行“完整性检查”,但是您应该尝试以编程方式解析日期以查看它是否有效。真正检查所有闰年规则等的正则表达式是possible but ghastly
    • 在这里,谢谢!效果很好。是的,我知道这一点,但目前对日期进行不那么严格的验证就足够了!
    【解决方案2】:

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

    $date = date_parse_from_format('d/m/Y', '08/08/2000');
    
    if ($date['warning_count'] || $date['error_count']) {
       // invalid date
    }
    

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

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

    【讨论】:

    • 有意思,我试试这个功能。谢谢!
    【解决方案3】:

    我认为你的问题是你试图在你的字符串中转义错误的斜杠,这只是让它认为你想要匹配反斜杠,但是它被你的正则表达式中的斜杠弄糊涂了。试试这个:

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

    【讨论】:

    • 在 PHP 中,您必须同时使用引号 (',") 和斜杠来分隔正则表达式。但是,它会在没有斜杠的情况下抛出此错误:“Unknown modifier '(' in /srv/ http/funlette/registerUser.php 第 40 行"
    • @hysoka44:这比我想象的要复杂。试试我的新答案。
    • 没有更多的 PHP 错误,很好!但它允许“80/08/2000”,不允许高于 31 天。
    • @hysoka44:您应该显示有问题的实际代码。
    • 感谢 Gabe 的帮助,我解决了这个问题:$regex="/^(0?[1-9]|[12][0-9]|3[01])\ /(0?[1-9]|1[012])\/((19|20)\d\d)$/";
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多