wake-up-neo.net

Wie validiere ich die Telefonnummer in Laravel 5.2?

Ich möchte die Benutzereingabe-Telefonnummer bestätigen, bei der die Nummer genau 11 sein soll und mit 01 und das Wertfeld nur die Nummer sein soll. Wie mache ich es mit der Laravel-Validierung?

Hier ist mein Controller:

  public function saveUser(Request $request){
        $this->validate($request,[
            'name' => 'required|max:120',
            'email' => 'required|email|unique:users',
            'phone' => 'required|min:11|numeric',
            'course_id'=>'required'
            ]);

        $user = new User();
        $user->name=  $request->Input(['name']);
        $user->email=  $request->Input(['email']);
        $user->phone=  $request->Input(['phone']);
        $user->date = date('Y-m-d');
        $user->completed_status = '0';
        $user->course_id=$request->Input(['course_id']);
        $user->save();
       return redirect('success');

    }
38
User57

Eine mögliche Lösung wäre die Verwendung von Regex.

'phone' => 'required|regex:/(01)[0-9]{9}/'

Dadurch wird geprüft, ob die Eingabe mit 01 beginnt und von 9 Zahlen gefolgt wird. Durch die Verwendung von Regex brauchen Sie nicht die Validierungsregeln numeric oder size.

Wenn Sie diese Validierungsmethode an anderer Stelle wiederverwenden möchten, empfiehlt es sich, eine eigene Validierungsregel für die Validierung von Telefonnummern zu erstellen.

Docs: Benutzerdefinierte Validierung

In Ihrer AppServiceProvider-Methode boot:

Validator::extend('phone_number', function($attribute, $value, $parameters)
{
    return substr($value, 0, 2) == '01';
});

Auf diese Weise können Sie die Validierungsregel phone_number überall in Ihrer Anwendung verwenden.

'phone' => 'required|numeric|phone_number|size:11'

In Ihrer Validierererweiterung können Sie auch überprüfen, ob der $value numerisch und 11 Zeichen lang ist.

61
SlateEntropy
Validator::extend('phone', function($attribute, $value, $parameters, $validator) {
        return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$%i', $value) && strlen($value) >= 10;
    });

Validator::replacer('phone', function($message, $attribute, $rule, $parameters) {
        return str_replace(':attribute',$attribute, ':attribute is invalid phone number');
    });

Verwendungszweck

Geben Sie diesen Code in den app/Providers/AppServiceProvider.php ein, um mit Ihrer Anwendung gebootet zu werden .

Diese Regel überprüft die Telefonnummer anhand des angegebenen Musters, das ich nachher gefunden habe 
lange Suche entspricht den gängigsten Mobil- oder Telefonnummern in vielen Ländern
Dadurch können Sie die Validierungsregel phone an einer beliebigen Stelle in Ihrer Anwendung verwenden. Die Gültigkeitsprüfung für Ihre Formulare lautet:

  'phone' => 'erforderlich | numerisch | phone' 

18
Nady Shalaby

Verwenden Sie required|numeric|size:11 Statt required|min:11|numeric

9
Abhishek

Ab Laravel 5.5 können Sie einen handwerklichen Befehl verwenden, um eine neue Regel zu erstellen, die Sie in Bezug auf Ihre Anforderungen codieren können, um zu entscheiden, ob sie bestanden hat oder nicht.

Ej: php artisan make:rule PhoneNumber

Bearbeiten Sie dann app/Rules/PhoneNumber.php, wenn die Methode durchläuft

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

    return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$%i', $value) && strlen($value) >= 10;
}

Verwenden Sie dann diese Regel wie üblich bei der Validierung:

use App\Rules\PhoneNumber;

$request->validate([
    'name' => ['required', new PhoneNumber],
]);

docs

8
vivoconunxino

Sie können dieses Telefonprüfungspaket ausprobieren. Laravel Telefon

Update

Vor kurzem entdeckte ich ein anderes Paket Lavarel Phone Validator (stuyam/laravel-phone-validator) , das den kostenlosen Twilio Phone Lookup-Service verwendet 

6
aphoe

Sie können einfach verwenden: 

        'mobile_number' => ['required', 'digits:10'],
0
Rishi

Es gibt viele Dinge, die bei der Validierung einer Telefonnummer zu berücksichtigen sind, wenn Sie wirklich darüber nachdenken. (besonders international) Ein Paket ist also bei weitem besser als die akzeptierte Antwort, und wenn Sie etwas Einfaches wie einen Regex wollen, würde ich vorschlagen, etwas Besseres als das, was @SlateEntropy vorschlägt. (etwas wie Eine umfassende Regex für die Bestätigung der Telefonnummer )

0
ShaneMit