我已经搜索了很多正则表达式来验证DD.MM.YYYY格式的日期。像这样:
+0+0
它工作正常。
据我所知,(0[1-9]|1[0-9]|2[0-8]|(?:29|30)(?!.02)|29(?=.02.\d\d(?:[02468][048]|[13579][26]))|31(?=.0[13578]|.1[02]))(?:\.(?=\d\d\.)|-(?=\d\d-)|\/(?=\d\d\/))(0[1-9]|1[0-2])[.\/\-]([1-9][0-9]{3})
部分是指年份。我尝试删除它并开始验证以点结尾的日期,例如([1-9][0-9]{3})
,01.05.
等。
10.07.
但是当我删除处理点/破折号分隔符的部分时
>>> regex = '^(0[1-9]|1[0-9]|2[0-8]|(?:29|30)(?!.02)|29(?=.02.\d\d(?:[02468][048]|[13579][26]))|31(?=.0[13578]|.1[02]))(?:\.(?=\d\d\.)|-(?=\d\d-)|\/(?=\d\d\/))(0[1-9]|1[0-2])[.\/\-]$'
>>> aaa = '12.02.'
>>> bbb = '32.02.'
>>> print(re.match(regex, aaa))
<_sre.SRE_Match object; span=(0, 6), match='12.02.'>
>>> print(re.match(regex, bbb))
None
它不会在没有尾随点的情况下验证日期:
[.\/\-]
我如何使这项工作?
关于2月28日/ 2月29日的更新:
如果它在2月28日29日没有通过,那没关系,这在我的情况下是可以接受的。
关于PYTHON的更新:
我不能对此使用python验证,遗憾的是它只是我可以使用的Web表单中的正则表达式字段。
答案 0 :(得分:0)
^(0[1-9]|[12][0-9]|30(?!\.02)|31(?!\.(0[2469]|11)))\.(0[1-9]|1[0-2])$
>>> daymonth_match = r"^(0[1-9]|[12][0-9]|30(?!\.02)|31(?!\.(0[2469]|11)))\.(0[1-9]|1[0-2])$"
>>> print re.match(daymonth_match, "12.04")
<_sre.SRE_Match object at 0x7f3728125880>
>>> print re.match(daymonth_match, "29.02")
<_sre.SRE_Match object at 0x7f3728125880>
>>> print re.match(daymonth_match, "30.02")
None
>>> print re.match(daymonth_match, "30.04")
<_sre.SRE_Match object at 0x7f3728125880>
>>> print re.match(daymonth_match, "31.04")
None
>>> print re.match(daymonth_match, "31.05")
<_sre.SRE_Match object at 0x7f3728125880>
假设29.02
始终有效。
此正则表达式依赖于负向前瞻断言(?!...)
。
例如,表达式30(?!\.02)
表示30
仅在\.02
AND后面是匹配时才会匹配,因为它是“向前看”,\.02
不被视为作为表达式本身的匹配(有关详细信息,请参阅python documentation)
答案 1 :(得分:0)
只需点和年可选:
$query = "SELECT * FROM blogs ORDER BY date DESC";
$resultSet = mysql_query($query);
if (mysql_num_rows($resultSet)){
$newsArray = array();
echo '<ul>' . PHP_EOL;
while ($newsResult = mysql_fetch_array($resultSet)){
$newDate = $newsResult['date'] ;
$timePeriod = date('F Y ',strtotime($newDate));
$timePeriodY = date('Y',strtotime($timePeriod));
$timePeriodM = date('F',strtotime($timePeriod));
$newsArray[$timePeriodY][$timePeriod][] = $newsResult;
}
//by year
foreach ($newsArray as $timePeriodY => $newsItems){
echo '<li><strong>' . $timePeriodY . '</strong>' . PHP_EOL;
echo '<ul>' . PHP_EOL;
//by month
foreach ($newsItems as $timePeriod => $items){
echo '<li><strong>' . $timePeriod . '</strong>' . PHP_EOL;
echo '<ul>' . PHP_EOL;
//news items
foreach ($items as $item){
echo '<li>';
echo '<a href="'.$wwwUrl.'press-releases/'.$item["id"].'/'.$item["titlename"].'.php">'.$item["titlename"].'</a>';
echo '</li>' . PHP_EOL;
}
//end by month
echo '</ul>' . PHP_EOL;
echo '</li>' . PHP_EOL;
}
//end by year
echo '</ul>' . PHP_EOL;
echo '</li>' . PHP_EOL;
}
echo '<li> </li>' . PHP_EOL;
echo '</ul>' . PHP_EOL;
} else {
echo 'No Blog Found';
}