Laravelでの時刻のバリデーション方法


  1. ルールベースのバリデーション: Laravelでは、バリデーションルールを使用して時刻の入力を検証することができます。以下のように、date_formatルールを使用して時刻のフォーマットを指定します。
$request->validate([
    'time' => 'required|date_format:H:i',
]);

上記の例では、timeというフィールドが必須であり、H:i形式(例: 13:45)の時刻であることを検証しています。

  1. カスタムバリデーションルールの作成: 特定のバリデーションルールが用意されていない場合、独自のカスタムバリデーションルールを作成することもできます。以下は、時刻が午前9時から午後5時の範囲内であることを検証するカスタムルールの例です。

まず、app/RulesディレクトリにTimeRange.phpという名前の新しいクラスを作成します。

namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class TimeRange implements Rule
{
    public function passes($attribute, $value)
    {
        $time = \DateTime::createFromFormat('H:i', $value);
        $start = \DateTime::createFromFormat('H:i', '09:00');
        $end = \DateTime::createFromFormat('H:i', '17:00');
        return $time >= $start && $time <= $end;
    }
    public function message()
    {
        return '時刻は午前9時から午後5時の範囲内である必要があります。';
    }
}

次に、バリデーションルールを使用して入力を検証します。

use App\Rules\TimeRange;
$request->validate([
    'time' => ['required', new TimeRange],
]);

上記の例では、timeというフィールドが必須であり、TimeRangeルールに合致する時刻であることを検証しています。

これらは、Laravelで時刻のバリデーションを行うためのシンプルで簡単な方法の一部です。他にも様々なバリデーションルールやカスタムルールを利用することができます。詳細な情報については、公式のLaravelドキュメントを参照してください。