首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查日期的PHP正则表达式采用YYYY-MM-DD格式

检查日期的PHP正则表达式采用YYYY-MM-DD格式
EN

Stack Overflow用户
提问于 2012-11-02 19:27:48
回答 21查看 265.7K关注 0票数 114

我正在尝试检查最终用户输入的日期是否采用YYYY-MM-DD格式。正则表达式从来都不是我的强项,我设置的preg_match()总是得到一个假返回值。

因此,我假设我把正则表达式弄得一团糟,详细说明如下。

代码语言:javascript
复制
$date="2012-09-12";

if (preg_match("^[0-9]{4}-[0-1][0-9]-[0-3][0-9]$",$date))
    {
        return true;
    }else{
        return false;
    }

有什么想法吗?

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2012-11-02 19:33:13

尝尝这个。

代码语言:javascript
复制
$date="2012-09-12";

if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)) {
    return true;
} else {
    return false;
}
票数 217
EN

Stack Overflow用户

发布于 2012-11-02 19:34:11

你可以这样做:

代码语言:javascript
复制
if (preg_match("/\d{4}\-\d{2}-\d{2}/", $date)) {
    echo 'true';
} else {
    echo 'false';
}

但是你最好使用这个:

代码语言:javascript
复制
$date = DateTime::createFromFormat('Y-m-d', $date);
if ($date) {
    echo $date -> format('Y-m-d');
}

在这种情况下,你将得到一个比字符串更容易使用的对象。

票数 19
EN

Stack Overflow用户

发布于 2016-02-21 07:11:40

我知道这是一个老问题。但我想我有一个很好的解决方案。

代码语言:javascript
复制
$date = "2016-02-21";
$format = "Y-m-d";

if(date($format, strtotime($date)) == date($date)) {
    echo "true";
} else {
    echo "false";
}

你可以试试。如果将日期更改为21.02.2016,则回应为false。如果在此之后将格式更改为d.m.Y,则回声为真。

有了这段简单的代码,您应该能够检查使用了哪种日期格式,而无需由正则表达式进行检查。

也许有一个人会在每一个案例上测试它。但我认为我的想法总体上是有效的。对我来说,这似乎是合乎逻辑的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13194322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档