Hello Devs, 

In this tutorial, we will learn Laravel 7/6 Validation Email or Phone

The field under validation must be present and not empty only when any of the other specified fields are not present.

If you enter phone number then email will be optional for you, and if you enter email then phone number will be optional.

Follow this step by step guide below. 



Solution:

$request->validate([

    'name' => 'required',

    'email' => 'required_without:mobile_no',

    'mobile_no' => 'required_without:email'

]);


Route: routes/web.php

Route::get('emailOrmobile','FrontHomeController@emailOrmobile');
Route::post('emailOrmobile','FrontHomeController@storeEmailOrmobile')->name('emailOrmobile.store');


Controller : app/Http/controllers/FrontHomeController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class FrontHomeController extends Controller
{

    public function emailOrmobile()
    {
        return view('validation.emailOrmobile');
    }

    public function storeEmailOrmobile(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'email' => 'required_without:mobile_no',
            'mobile_no' => 'required_without:email'
        ]);
        
        return redirect()->back();
    }
}


View : resources/views/validation/emailOrMobile.blade.php

<!DOCTYPE html>
<html>
<head>
    <title></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>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-md-6 offset-3">
                <div class="card mt-5">
                    <div class="card-header text-center bg-info">
                        <h3 class="text-white"> <strong>Eamil Or Phone Validation rathorji.in</strong></h3>
                    </div>
                    <div class="card-body">
                        @if (count($errors) > 0)
                            <ul class="alert alert-danger">
                            @foreach($errors->all() as $error)
                               <li>{{ $error }}</li> 
                            @endforeach
                            </ul>
                        @endif
                        <form action="{{ route('emailOrmobile.store') }}" method="post">
                            @csrf
                            <div class="form-group">
                                <label>Name : </label>
                                <input type="text" name="name" class="form-control">
                            </div>
                            <div class="form-group">
                                <div class="row">
                                    <div class="col-md-6">
                                        <label>Email : <span class="text-danger">**</span></label>
                                        <input type="text" name="email" class="form-control" placeholder="Enter Email">
                                    </div>
                                    <div class="col-md-6">
                                        <label>Phone : <span class="text-danger">**</span></label>
                                        <input type="text" name="mobile_no" class="form-control" placeholder="Enter Mobile Number">
                                    </div>
                                </div>
                            </div>
                            <div class="text-center">
                                <button class="btn btn-success"><i class="fa fa-floppy-o" aria-hidden="true"></i> Save </button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>


May this example help you.