PHPで日/月/年の選択を検証する方法は? 2 ~ 3 または 5 ~ 6 の選択オプションを使用して、誰が選択を検証するかについていくつかのトピックを取り上げました。そのような選択を検証する方法を知っているでしょう。しかし、たとえば月の場合、32 のオプションがあります。または、年式オプションの場合、60~70 のオプションがあります。非常に多くのオプションがある場合に選択検証を行う最適な方法に興味がありますか?
2 に答える
選択の検証はかなり簡単です。
年
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;
}
年を検証するのに十分なほど単純です。
月
今年が何年かがわかったので、うるう年かどうかを調べることができます。ただし、それは 1 か月のみに重要なので、最初に選択した月を検証しましょう。
<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;
}
日
これで、月と年がわかります。選択した日を検証するには、次の基準を確認する必要があります。
- うるう年ですか?
- うるう年の余分な日がある月ですか?(2月)。
ある年がうるう年になるには、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];
うるう年の場合は、その月の合計日数に 1 日追加します。
if ($month == 1 && isLeapYear($year)) //February
$monthDays++;
最後に、その日を検証できます
$day = (int) $_POST["day"];
if ($day < 0 || $day > $monthDays) {
$validationPassed = false;
}
checkdate()
さて、これらすべては基本的に、以下の他の回答にあった関数にカプセル化されています。したがって、checkdate()
上記のすべてのコードの代わりに使用するには、次のようにするだけです。
HTML (注: checkdate() は 0 ベースではないため、日と月は 0 ではなく 1 から始まります。)
<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);