distinct

تستخدم في حال أن المدخلات على شكل مصفوفة، ولا أريد أن تتكرر قيم المدخلات

لو كان لدي الفورم التالي

<form action="{{route('validation.store')}}" method="POST">
    @csrf
    <div class="container">
        @if (count($errors) > 0)
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
        <input type="text" value="{{ old('score.0') }}" name="score[]" class="form-control"/>
        <input type="text" value="{{ old('score.1') }}" name="score[]" class="form-control"/>
        <button type="submit"  class="btn btn-primary">Add</button>
    </div>
</form>

كما نلاحظ أن score هي عباره عن مصفوفة، فإذا أردنا أن لا تتكرر قيم المدخلات، يمكن إستخدام distinct

$request->validate([
    'score'=>'required|array',
    'score.*'=>'distinct',
]);

أما في حال تكرار قيمة المدخلات فسوف نحصل على الخطأ التالي

لكن يجب الإنتباه، أنه غير حساس لحالة الأحرف فلو تم إدخال a في الحقل الأول و A في الحقل الثاني، فإن التحقق سوف يقبلها، ولجعلة حساس لحالة الأحرف نضيف إلى distinct خيار أخر وهو ignore_case

$request->validate([
    'score'=>'required|array',
    'score.*'=>'distinct:ignore_case',
]);


ends with

لفرض أن لدينا فورم لإدخال البريد الإلكتروني، وأريد أن يتم التسجيل فقط من خلال gmail أستخدم ends_with:gmail.com

فلو كان لدي الفورم التالي لإدخال البريد الإلكتروني وأريد التحقق أن البريد الإلكتروني يكون فقط Gmail

$request->validate([
    'email'=>'required|ends_with:gmail.com',
]);
<form action="{{route('validation.store')}}" method="POST">
    @csrf
    <div class="container">
        @error('email')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <input type="text" value="{{ old('email') }}" name="email" class="form-control"/>
        <button type="submit"  class="btn btn-primary">Add</button>
    </div>
</form>

وإذا كان البريد الإلكتروني ليس gmail فسوف أحصل على الخطأ التالي

أما إذا كنا نريد أن نسمح لأكثر من مزود بريد إلكتروني مثلا gmail.com, yahoo.com, hotmail.com

$request->validate([
    'email'=>'required|ends_with:gmail.com,yahoo.com,hotmail.com',
]);

starts with

هي عكس end_with، لفرض أن لدي حقل لتعبئة رقم الهاتف، وأريد أن أتأكد ان المدخل يبدأ بـ 00970

<form action="{{route('validation.store')}}" method="POST">
    @csrf
    <div class="container">
        @error('tel')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <input type="text" value="{{ old('tel') }}" name="tel" class="form-control"/>
        <button type="submit"  class="btn btn-primary">Add</button>
    </div>
</form>
$request->validate([
    'tel'=>'required|starts_with:00070',
]);

كذلك يمكن إضافة أكثر من قيمة للتحقق 

$request->validate([
    'tel'=>'required|starts_with:00070,00966,00962',
]);

وإذا كانت القيمة غيرر المسموح بها سوف أحصل على الخطأ التالي


Exclude_if

يتم إسخدامها في حال وجود أكثر من input بحيث يكون الحقل الثاني إجباري، إذا إحتوى الحقل الأول على قيمة معينة

 لفرض لدي الفورم التالي

<form action="{{route('validation.store')}}" method="POST">
    @csrf
    <div class="container">
        @error('Country')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <select name="Country" class="form-control">
            <option value="">الرجاء إختيار الدولة</option>
            <option value="Palestine">Palestine</option>
            <option value="Jordan">Jordan</option>
        </select>
        @error('tel')
        <div class="alert alert-danger">{{$message}}</div>
        @enderror
        <input type="text" value="{{ old('tel') }}" name="tel" class="form-control"/>
        <button type="submit"  class="btn btn-primary">Add</button>
    </div>
</form>

وأريد إذا تم تم إختيار Palestine في حقل Country ان يكون tel غير إجباري، أما إذا تم إختيار دولة أخرى أن يكون إجباري 

$request->validate([
    'Country'=>'required',
    'tel'=>'exclude_if:Country,Palestine|required',
]);

exclude_unless

هي عكس excluded_if بحيث لا يصبح حقل tel إجباري إلا إذا كانت قيمة Country=Palestine

$request->validate([
    'Country'=>'required',
    'tel'=>'exclude_unless:Country,Palestine|required',
]);