Hello Devs, 

In this tutorial, we will learn Laravel 8 Custom Validation Rules Example

Validation is a primary requirement of every project, without validation we can not release successful applications or websites.

But if we want to create our own custom validation like given value should be in uppercase or lowercase etc as we require.

Follow this step-by-step guide below. 

Step 1: Create Custom Validation Rule

php artisan make:rule CheckAgeRule



namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CheckAgeRule implements Rule
     * Create a new rule instance.
     * @return void
    public function __construct()

     * Determine if the validation rule passes.
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
    public function passes($attribute, $value)
        if ($value < 30) {
            return true;

     * Get the validation error message.
     * @return string
    public function message()
        return 'The :attribute must be less than 30.';

Step 2: Add Routes


use App\Http\Controllers\CustomValidationController;

//Custom Validation
Route::get('/custom-validation', [CustomValidationController::class, 'index'])->name('custom.validation.index');
Route::post('/custom-validation/store', [CustomValidationController::class, 'store'])->name('custom.validation.store');

Step 3: Create CustomValidationController

php artisan make:controller CustomValidationController

We will create create seven methods by default as bellow methods

  1. index()
  2. store()

copy the below code and paste it on CustomValidationController.php file.



namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Rules\CheckAgeRule;

class CustomValidationController extends Controller
    public function index()
    	return view('customValidation');

    public function store(Request $request)
            'name' => 'required',
            'age' => [
                new CheckAgeRule()


Step 4: Create View File


<!DOCTYPE html>
    <title>Laravel 8 Custom Validation</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" integrity="sha256-NuCn4IvuZXdBaFKJOAcsU2Q3ZpwbdFisd5dux4jkQ5w=" crossorigin="anonymous" />
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<div class="container">
    <div class="row">
        <div class="col-md-6 offset-3 mt-5">
            <div class="card mt-5">
                <div class="card-header text-center bg-info">
                    <h2 class="text-white"> <strong>Custom Validation</strong></h2>
                <div class="card-body">
                    @if (count($errors) > 0)
                        <ul class="alert alert-danger pl-5">
	                        @foreach($errors->all() as $error)
	                           <li>{{ $error }}</li> 
                    <form action="{{ route('custom.validation.store') }}" method="post">
                        <div class="form-group">
                            <input type="text" name="name" class="form-control">
                        <div class="form-group">
                            <input type="text" name="age" class="form-control">
                        <div class="text-center">
                            <button class="btn btn-success"><i class="fa fa-floppy-o" aria-hidden="true"></i> Save </button>

run the below command for a quick run:

php artisan serve

open bellow URL on your browser:


May this example help you.