我对正则表达式有一些问题, 这个检查我的日期是否为mm / dd / yyyy格式:
/^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d+$/
我需要相同的但是检查日期是否像dd / mm / yyyy(欧洲日期)
我不清楚这些东西是如何工作的,我已经检查了一些指南,但我无法弄清楚如何编辑这个。
任何帮助将不胜感激=)
答案 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$