如何使用HTML5验证日期模式

时间:2019-01-02 09:39:07

标签: regex html5

您好,我正在尝试验证复选框上的日期格式。我的模式如下:yyyym-yyyyd-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"/>

如何实现以上目标?

2 个答案:

答案 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部分组成:

  • (0 [1-9] | 1 [0-9] | 2 [0-9] | 3 [01])。(0 [1-9] | 1 [012])。[0-9] {4}

检查格式DD.MM.YYYY

  • [0-9] {4}

检查格式YYYY

  • (0 [1-9] | 1 [012])。[0-9] {4}

检查格式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. 使用已经讨论过的正则表达式将传入数据拆分为1、2或3个字段,例如$ d,$ m,$ y,其中一些为NULL。

  2. 根据数据使用合适的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'。