2010-07-24 54 views
3

我想检查一个日期格式,看看我能否检查数据变量具有特定格式如MM-DD-YYYY。如果没有,则退出()。我不知道如何检查格式,如果有人能帮助我,我将不胜感激。谢谢...如何检查在PHP中的数据格式

$date=05/25/2010;  
if(XXXXX){ 
    // do something.... 
} 
+0

谢谢你们。我还没有投票给你们。 投票给我,使我达到15的声望,我给你所有+1 ..:D – user401184 2010-07-24 18:52:40

回答

2

使用正则表达式,如其他人所说。然而之前发布的版本会接受99/99/9999的无效日期。这里有一个改进的正则表达式(从here lifed)

$date_regex = '!^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$!'; 
if (preg_match($date_regex, $date)) { 
    // do something 
} 

它只会采取有效日期,它也将接受不同的分隔符(如2002年5月20日和2002年5月2日)。

如果你问我,强迫用户输入特定格式的用户体验不好。您可以使用strtotime()处理不同的格式。

+0

不错....非常感谢! – user401184 2010-07-24 18:51:55

+0

谢谢你。我还没有投票给你们。投票给我,让我到15声望,我给你所有+1 – user401184 2010-07-24 18:57:42

+0

如果我只想要两种格式只有mm-dd-yyyy或yyyy-mm-dd,我应该创建两个正则表达式吗?谢谢。 – user401184 2010-07-24 19:00:06

4

可以使用regular expressions

if(preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/")) 
{ 
    do something 
} 
+0

注意:以无效输入(如00/00/0000) – NullUserException 2010-07-24 18:41:21

+0

谢谢你。我还没有投票给你们。投票给我,让我15声望,我给你所有+1 – user401184 2010-07-24 18:56:20

2

如果你想这样做是为了限制用户的输入,你总是可以在用户输入使用strtotime()和转换它转换为unix时间戳,然后使用date()函数来显示它的方式。

如果你真的想确定它是否处于某种格式,或只需要某种格式,具有正则表达式的preg_match()会有帮助,我相信他们在那个页面上有解析日期的例子。如果没有它会是这样的:

if (preg_match('~[0-9]{2}-[0-9]{2}-[0-9]{4}~', $dateStr)) { echo 'Correct format'; }

与明显的缺陷是日期可能通过格式测试,但可能不是一个有效日期。在我看来,接受用户输入中的任何日期,并使用strtotime/date来达到你想要的格式。

+0

非常好的一个。非常感谢。 – user401184 2010-07-24 18:51:02

+0

谢谢你。我还没有投票给你们。投票给我,让我的15声望,我给你所有+1 – user401184 2010-07-24 18:55:46

1

如果我理解正确,你想检查一个字符串,以确保它遵循MM-DD-YYYY模式?

如果是这样,我会建议两个检查:一个以确保它遵循数字的一般模式,另一个检查月份是第一个和第二个。

function checkDate($date) 
{ 

    if (preg_match("/[0|1][0-9]/[0-9][1-9]/[0-9]{4}/",$date) 
    { 
     if (substr($date,0,2)<=12 && substr($date,3,2)<=31) 
     { 
      return true; 
     } 
    } 
    return false 

} 

更新:加在三天的检查,以确保它是有效的,基于NullUser的评论

+0

这仍然需要无效输入,如12/99/2000 – NullUserException 2010-07-24 18:40:54

+0

谢谢你。我还没有投票给你们。投票给我,让我15声望,我给你所有+1 – user401184 2010-07-24 18:57:00