编辑正则表达式
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$
我对正则表达式有一些疑问, 这个检查我的日期是否为 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$