您好,我正在尝试验证复选框上的日期格式。我的模式如下:yyyy
或m-yyyy
或d-m-yyyy
如果以上述格式输入,则应允许输入,否则不应提交表格。插入上述模式后,我需要将它们与MYSQL数据库日期字段进行比较。例如,如果输入年份,则仅匹配给定年份。如果添加了月份和年份,则仅在数据库中比较月份和年份。
我尝试了以下模式,但仅完全匹配。我需要匹配所有情况
<input type="text" name="input" placeholder="YYYY-MM-DD" required
pattern="(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))"
title="Enter a date in this format YYYY-MM-DD"/>
如何实现以上目标?
答案 0 :(得分:3)
您可以使用以下模式:
((0[1-9]|1[0-9]|2[0-9]|3[01]).(0[1-9]|1[012]).[0-9]{4})|[0-9]{4}|(0[1-9]|1[012]).[0-9]{4}
这由3部分组成:
检查格式DD.MM.YYYY
检查格式YYYY
检查格式MM-YYY
input {
width: 100%;
}
<form action="">
<input type="text" name="input" placeholder="YYYY or MM-YYYY or DD-MM-YYYY" required pattern="((0[1-9]|1[0-9]|2[0-9]|3[01]).(0[1-9]|1[012]).[0-9]{4})|[0-9]{4}|(0[1-9]|1[012]).[0-9]{4}" />
<button type="submit">test</button>
</form>
答案 1 :(得分:1)
使用已经讨论过的正则表达式将传入数据拆分为1、2或3个字段,例如$ d,$ m,$ y,其中一些为NULL。
根据数据使用合适的WHERE子句构建查询:
在PHP中,假设dt
是要针对其进行测试的列:
$wheres = array();
$wheres[] = "'$y' = LEFT(dt, 4)"; -- test the Year
if (isset($m))
$wheres[] = "0+'$m' = 0+MID(dt, 6, 2)"; -- and month (if given)
if (isset($d))
$wheres[] = "0+'$d' = 0+MID(dt, 9, 2)";
$where_clause = implode(" AND ", $wheres); -- put the tests together
$sql = "SELECT ... WHERE ( $where_clause ) ...";
注意:0+
用于避免字符串比较,例如month ='3'与'03'。