【问题标题】:How to differentiate date formats as dd/mm/yy or dd/mm/yyyy?如何区分日期格式为 dd/mm/yy 或 dd/mm/yyyy?
【发布时间】:2017-06-22 05:32:54
【问题描述】:

我正在尝试访问给定日期值的格式。我需要检查格式是dd/mm/yy 还是dd/mm/yyyy。我在preg_match() 中使用了以下模式,但它们不起作用。

'^\d{1,2}\/\d{1,2}\/\d{4}^'  //  dd/mm/yyyy

'^\d{1,2}\/\d{1,2}\/\d{2}^'  //  dd/mm/yy

谁能帮我找到正确的模式?

【问题讨论】:

  • 这是由简单的印刷错误引起的错误,可以通过在 www.regex101.com 上进行测试或对正则表达式语法/阅读 SO 页面进行快速研究来识别。这种模式和公认的答案充其量只能对日期进行松散的验证。换句话说,像99/99/9999 这样的无效日期将毫无问题地匹配。为获得最佳结果,请使用 checkdate() 或 DateTime 类函数来验证日期。
  • 请注意最好的answers on this page 是如何不使用正则表达式的,而那些只会随着模式呈指数增长而提高质量的方法。使用正则表达式并不是检查日期的最佳工具。

标签: php regex validation date date-formatting


【解决方案1】:

问题:

1. 这个$ 应该在结尾而不是^$ 是字符串的结尾。

2.不要忘记分隔符/

正则表达式:

/^\d{1,2}\/\d{1,2}\/\d{4}$/ 用于类似10/10/1111 的字符串

/^\d{1,2}\/\d{1,2}\/\d{2}$/ 表示 10/10/11 之类的字符串

Try this code snippet here

【讨论】:

    【解决方案2】:

    您的正则表达式语法有误。在正则表达式中,模式的开头用 ^ 表示,结尾用 $ 表示。

    您可以使用以下方法来验证给定的日期格式。

    $date_to_check = "22/06/2017";
    $true = preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/", $date_to_check);
    var_dump($true);
    

    但是,您不应该仅针对正则表达式验证日期。您需要将年、月、日期传递给 php 的 checkdate() 函数才能真正验证它。

    PHP checkdate() doc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 2012-03-05
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多