编辑正则表达式

时间:2015-02-09 11:23:57

标签: regex date

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

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

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

我不清楚这些东西是如何工作的,我已经检查了一些指南,但我无法弄清楚如何编辑这个。

任何帮助将不胜感激=)

3 个答案:

答案 0 :(得分:1)

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

我想再添加两个观察结果:

  • 通常(根据我的经验,主要是网络)转义字符(在.之前的表达式中使用\而不是/
  • 在你的表达结尾处有(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

答案 1 :(得分:0)

php的例子

09-02-2015

/**
         * 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;
            }
        }

答案 2 :(得分:0)

  • ^(0[1-9]|1[012])与月份组件匹配
  • (0[1-9]|[12][0-9]|3[01])匹配月份组件
  • (19|20)\d\d与年份组件匹配
  • [- /.]只匹配 - ,空格,/或。

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

我认为正则表达式末尾的+并不属于那里 - 它会在年份组件之后允许其他数字。

重新组织以匹配dd/mm/yyyy的正则表达式如下所示:

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