如何使用 php 验证日/月/年选择?我用 2-3 甚至 5-6 个选择选项验证了一些关于谁来验证选择的主题。我会知道如何验证这种选择。但是以月份为例,有 32 个选项。或者在年份选项的情况下,有 60-70 个选项。所以我对当您有这么多选择时进行选择验证的最佳方法感兴趣?
2 回答
对于 date 它实际上相对容易 - 你只需使用checkdate()
.
对于其他情况,您可以检查该值是否在预期范围内,例如:
if ($val >= min && $val <= max)
或者,如果您拥有数组中的所有值
if (in_array($val, $array_of_valid_values))
验证选择是相当简单的。
年
假设您有一个从 1960 年到 2013 年的连续年份范围。
您的选择 HTML 是:
<select name="year">
<option value="1960">1960</option>
...
<option value="2013">2013</option>
</select>
所以,你知道你的年份必须落在 1960 到 2013 的范围内:
$year = (int) $_POST["year"]);
if ($year < 1960 || $year > 2013) {
$validationPassed = false;
}
简单到足以验证年份。
月
既然你知道它是哪一年,你就可以知道它是否是闰年。但是,这仅对一个月很重要,所以首先让我们验证他们选择的月份:
<select name="month">
<option value="0">January</option>
...
<option value="11">December</option>
</select>
再一次,月份的验证很容易。我们知道它必须是 0 到 11 之间的值。
$month = (int) $_POST["month"];
if ($month < 0 || $month > 11) {
$validationPassed = false;
}
天
现在我们知道了月份和年份。要验证所选日期,我们需要检查以下标准:
- 是闰年吗?
- 是闰年多出一天的月份吗?(二月)。
要成为闰年的年份,它必须能被 400 整除,或者不能被 100 整除且能被 4 整除:
function isLeapYear($year) {
if ($year % 400 == 0)
return true;
else if ($year % 100 == 0)
return false;
else if ($year % 4 == 0)
return true;
return false;
}
现在,我们可以检查它是否是闰年。如果是闰年,那么我们知道我们需要在 2 月多留出 1 天。
我们在每个月制作一组天数:
$daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
然后我们得到当月的天数:
$monthDays = $daysInMonth[$month];
如果是闰年,我们在该月的总天数上加一天:
if ($month == 1 && isLeapYear($year)) //February
$monthDays++;
最后,我们可以验证这一天
$day = (int) $_POST["day"];
if ($day < 0 || $day > $monthDays) {
$validationPassed = false;
}
现在,所有这些基本上都封装checkdate()
在下面另一个答案中的函数中。因此,要使用checkdate()
而不是上面的所有代码,您可以简单地执行以下操作:
HTML (注意:checkdate() 不是从零开始的,所以我们从 1 而不是 0 开始我们的日子和月份。)
<form action="myphp.php" method="post">
<select name="day">
<option value="1">1</option>
...
<option value="31">31</option>
</select>
<select name="month">
<option value="1">1</option>
...
<option value="12">12</option>
</select>
<select name="year">
<option value="1960">1960</option>
...
<option value="2013">2013</option>
</select>
</form>
PHP
$day = (int) $_POST["day"];
$month = (int) $_POST["month"];
$year = (int) $_POST["year"];
$validationPassed = checkdate($month, $day, $year);