编辑正则表达式

Edit a regular expression

我对正则表达式有一些疑问, 这个检查我的日期是否为 mm/dd/yyyy 格式:

/^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d+$/

我需要相同的,但要检查日期是否像 dd/mm/yyyy(欧洲日期)​​

我不知道这些东西是如何工作的,我已经检查了一些指南,但我不知道如何编辑这个。

任何帮助将不胜感激 =)

php

的示例

2015 年 9 月 2 日

/**
         * Validates the date
         * @param string $date
         * @return boolean
         */
        protected function checkDate($date)
        {
            if (preg_match('@^[0-9]{2}-[0-9]{2}-[0-9]{4}$@', $date)) {
                return true;
            } else {
                return false;
            }
        }

2015 年 9 月 2 日

/**
         * Validates the date
         * @param string $date
         * @return boolean
         */
        protected function checkDate($date)
        {
            if (preg_match('@^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$@', $date)) {
                return true;
            } else {
                return false;
            }
        }

仔细看看你的表达式:你会看到它分为三个部分:第一部分 (0[1-9]|1[012]) 匹配月份(从 01 到 12),第二部分 (0[1-9]|[12][0-9]|3[01]) 匹配天(从 01 到 31),而最后一部分 (19|20)\d\d+ 匹配年(从 1900 年开始)。最后,[- /.] 匹配您的分隔符(- </code> 或 <code>.)并且 ^$ 匹配字符串开头和字符串分别结束。

我想再补充两点:

  • 通常(根据我的经验,主要是网络)转义字符(在 . 之前的表达式中使用是 \ 而不是 /
  • 在你的表达式末尾你有 (19|20)\d\d+:这将数学运算 1900 但也会匹配 190000(因为 + 号)。

鉴于此,我将按如下方式更改您的正则表达式:

^(0[1-9]|[12][0-9]|3[01])[- \.](0[1-9]|1[012])[- \.](19|20)\d{2}$

但是请注意,此正则表达式也将匹配无效日期,例如 2 月 30 日。

如果您需要更准确的信息,请查看此处:Regex to validate date format dd/mm/yyyy

  • ^(0[1-9]|1[012]) 匹配月份部分
  • (0[1-9]|[12][0-9]|3[01]) 匹配月中的日期组件
  • (19|20)\d\d 匹配年份组件
  • [- /.] 只匹配 -、space、/ 或 .

这意味着您的正则表达式也将匹配例如12-31/2013

我认为正则表达式末尾的 + 不属于那里 - 它允许在年份部分之后添加额外的数字。

重组为匹配 dd/mm/yyyy 的相同正则表达式将如下所示:

^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\d\d$