【问题标题】:How to check the data format in PHP如何在 PHP 中检查数据格式
【发布时间】:2010-07-24 18:28:34
【问题描述】:

我正在尝试检查日期格式以查看是否可以检查数据变量是否具有某种格式,例如 MM-DD-YYYY。如果没有,则退出()。我不确定如何检查格式,如果有人可以帮助我,我将不胜感激。谢谢...

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

【问题讨论】:

  • 谢谢大家。我还不能给你们投票。投票给我,让我获得 15 名声望,我给你们 +1..:D

标签: php date formatting


【解决方案1】:

你可以使用regular expressions

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

【讨论】:

  • 注:接受无效输入(如00/00/0000)
  • 谢谢伙计。我还不能给你们投票。投票给我,让我获得 15 名声望,我给你们 +1
【解决方案2】:

按照其他人的建议,使用正则表达式。然而,之前发布的将接受无效日期,例如 99/99/9999。这是一个改进的正则表达式(来自here

$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
}

它只需要有效的日期,它也接受不同的分隔符(例如 05.20.2002 和 05-02-2002)。

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

【讨论】:

  • 谢谢伙计。我还不能给你们投票。投票给我,让我获得 15 名声望,我给你们 +1
  • 如果我只想要两种格式,比如 mm-dd-yyyy 或 yyyy-mm-dd,我应该创建两个正则表达式吗?谢谢。
【解决方案3】:

如果您试图这样做来限制用户的输入,您可以随时在用户输入上使用strtotime() 并将其转换为unix 时间戳,然后使用date() 函数以您想要的方式显示它。

如果您真的想确定它是否采用某种格式,或者只需要某种格式,带有正则表达式的preg_match() 会有所帮助,我相信该页面上有解析日期的示例。如果不是,它会是这样的:

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

明显的缺陷是日期可能通过格式测试,但可能不是有效日期。在我看来,接受用户输入中的任何日期并使用 strtotime / date 将其转换为您想要的格式。

【讨论】:

  • 谢谢伙计。我还不能给你们投票。投票给我,让我获得 15 名声望,我给你们 +1
【解决方案4】:

【讨论】:

    【解决方案5】:

    如果我理解正确,您想检查一个字符串以确保它遵循 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 的评论添加了额外的日期检查以确保其有效

    【讨论】:

    • 这仍然需要无效输入,例如 12/99/2000
    • 谢谢哥们。我还不能给你们投票。投票给我,让我获得 15 名声望,我给你们 +1
    【解决方案6】:
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 2011-10-29
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多